<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"> <path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path> </svg> <p></p>
讯享网
窗口限定一个范围,可以理解为满足某些条件的记录集合。窗口函数也就是在窗口范围内的执行的函数
窗口函数有 over 关键字,指定函数执行的范围。可分为三部分:分组字句 (partition by),排序字句 (order by),滑动窗口字句 (rows)
讯享网
1.4.1 例1:查询各班级总分
讯享网
1.4.2 例2:查询各班级累计总分

1.4.3 分区子句(partition by)
① 不分区可以写成 partition by null,或者直接不写
② 后面可以跟多个列,例如 partition by cid, sname
partition by 和 group by的区别: partition by 不将行数去重,group by 会将行数去重
1.4.4 排序子句(order by)
① 不排序可以写成 order by null,或者直接不写
② 后面可以跟多个列,例如 order by cid, sname
1.4.5 窗口子句(rows)
语法概述:
① 起始行:N preceding / unbounded preceding
② 当前行:current row
③ 终止行:N following / unbounded following
举例:
① 从分区内的前面所有行到当前行:rows between unbounded preceding and current row
② 从分区内的前面 2 行到当前行:rows between 2 preceding and current row
③ 从分区内的当前行到后面所有行:rows between current row and unbounded following
④ 从分区内的当前行到后面 3 行:rows between current row and 3 following
注意:
① partition by 分区字句后,若 order 排序子句后缺少 rows 窗口子句,窗口规范默认为:rows between unbounded preceding and current row
② partition by 分区字句后, 若 order 排序子句和 rows 窗口子句都缺少,窗口规范默认为:rows between unbounded preceding and unbounded following
1.4.6 总体执行流程
① 通过 partition by 和 order by 确定大窗口(定义出上界和下界)
② 通过 rows 字句针对每一行数据,确定小窗口(即滑动窗口)
③ 针对每行的小窗口内的数据,执行函数并生成新的列
1.5.1 排序类函数
① row_number:序号不重复,且序号连续(即连续排名,不考虑并列)。例如:1,2,3 …
② rank:序号可重复,且序号不连续(即跳跃排名,考虑并列)。例如:1,2,2,4 …
③ dense_rank:序号可重复,且序号连续(即连续排名,考虑并列)。例如:1,2,2,3 …
讯享网

1.5.2 聚合类函数
sum,avg,count,max,min
1.5.3 跨行类函数

讯享网
题目 1:查询每个学生成绩最高的三个学科(分组内 Top N 问题)


题目 2:查询每个学科都高于班级学科平均分的学生(汇总分析问题)
讯享网

题目 1:查询每个部门工资最高的前三个员工信息(分组内 Top N 问题)
讯享网

题目 2:查询员工工资占所属部门总工资的百分比(汇总分析问题)

题目 3:对各部门员工的工资进行升序排列,排名前 30% 为底层,30% - 80% 为中层,80% 以上为高层,并打上标签
讯享网

题目 4:查询每年入职总数以及截至本年累计入职总人数(本年总入职人数 + 本年之前所有年的入职人数之和)

① 本文用窗口函数解决的 2 个主要问题:分区内 Top N 问题,汇总分析问题
② 分区内 Top N 公式
讯享网
③ 窗口函数 → 生成辅助列(用于计算百分比等)
④ 重要:with 子句 → 生成临时表,把复杂的问题拆分成多个子问题,再用临时表表达

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/183775.html