1、开窗函数跟聚合函数的区别
- 聚合函数根据聚合的字段,一组数据只会返回一条数据
- 开窗函数不会改变返回的条数,有多少条数据就返回多少条
- 开窗函数仅仅是根据聚合或者排序函数增加了一列字段而已,开发者可以根据开窗结果筛选自己需要的结果
- 开窗函数针对的是每行数据,over():内的函数针对的是窗口的大小,over()前的函数,针对窗口内的数据进行聚合或者排序
- 如果over()内是空的,默认的窗口大小是整个数据集
- over()内的函数可以是空或者partition by|distribute by 或者 order by | sort by
而group by :针对的是每个组,根据聚合函数的结果返回一个值 - over()前的函数有下面几种:
1、聚合函数:max/min/sum/avg/count
2、跨行取值函数: lead/lag, 获取当前行的上一行和下一行
3、first_value/last_value: 获取窗口内的某一列的第一个值、最后一个值
4、排名函数
rank
dense_rank
row_number: