进入SQL学习的倒数第二天了!
周四的学习,早上围绕 开窗函数 下午围绕 QL知识点的 进阶应用 开展🙌
1. 开窗函数
- 开窗函数本质是聚合函数
select *, (字段名) over ( [partition by 分组字段] [order by 排序字段 desc] [滑动窗口]) from table; -- 开窗函数基础语法
- over()中没有指定分区/排序/滑动窗口 : 默认计算的是结果集中的所有记录行;
- over(指定分区) : 那么默认计算的是分区内的所有行
- over(指定分区和排序): 没有指定滑动窗口,默认计算的是分区内的第一行到当前行
- over(分区/排序/滑动窗口): 都用上,可以计算移动平均值,这个数值是预测类指标
- between frame_start and frame_end -- 滑动窗口的范围指定语法
frame_start及frame_end可以支持如下关键字:

- 窗口函数
first_value()/last_value/nth_value-- 动态窗口函数
row_number()/rank()/dense_rank()/percent_rank()/cume_dist()/lag()/lead()/ntile()-- 静态窗口函数
- 开窗函数 vs. 普通聚合函数
- 聚合函数是将多条记录聚合为一条
- 开窗函数是将每条记录都执行,有几条记录执行完还是几条
- 聚合韩式可以用于开窗函数
- 只能用开窗函数的情况:1. 排名 2. 计算连续登陆天数 3. 计算移动平均值
2. (开窗函数的)序号函数
作用:显示排名
select *, row number() over(order by 排序字段 desc)字段别名 from table; -- 显示分区中不重复不间断的序号
select *, dense_rank() over(order by 排序字段 desc)字段别名 from table; -- 显示分区中重复不间断的序号
select *, rank() over(order by 排序字段 desc)字段别名 from table; -- 显示分区中重复间断的序号
*以上均是开窗函数中的静态函数,在over中设置滑动窗口无效。
进阶部分都是这3.5天基础知识的实战,所以这里就不作整理了,一个下午过来感觉对基础知识的掌握牢固程度直接影响进阶练习的答题速度与效果😂








暂无数据