总结:
常用函数:
GROUP_CONCAT:
用于将分组内的多个字符串值连接成一个字符串的聚合函数,常用于报表生成、数据汇总等场景

一、窗口函数
1.1 语法结构
window_function (expr) over (
partition by ...
order by ...
frame_clause
)
其中,window_function是窗口函数的名称,expr是参数,有些函数不需要参数;
over子句包含三个选项:
分区 partition by
partition by 选项用于将数据行拆分多个分区(组),它的作用类似group by,如果省略了 partition by,则所有的数据作为一个组进行计算
排序 order by
该选项用于指定分区内的排序方式
窗口大小 frame_clause
frame_clause选项用于在当前分区内指定一个计算窗口,也就是一个与当前行相关的数据子集
二、序号函数
序号函数有三个:row_number()、rank()、dense_rank(),可以用来实现分组排序,并添加序号
区别:
row_number():从1开始排序,哪怕是相同数据也会正常排序
rank():如果两个数据相同,那么第三个数据的序号直接为3
dense_rank():如果两个数据相同,那么第三个数据的需要还是为2
2.1 语法结构
row_number() | rank() | dense_rank() over(
partiton by ...
order by ...
)
2.2 示例


三、开窗聚合函数
在窗口中每条记录动态的应用聚合函数(sum、avg、max、min、count),可以动态计算在指定的窗口内各种聚合数值
四、分布函数cume_dist和percent_rank
cume_dist:
用途:分组内小于、等于当前rank值的行数/分组内总行数
应用场景:查询小于等于当前薪资的比例

percent_rank:
用途:每行按照公式(rank-1)/(rows-1)进行计算,其中,rank为rank()函数产生的序号,rows为当前窗口的记录总行数
应用场景:不常用
五、前后函数lag和lead
用途:返回位于当前行的前n行(lag(expr, n))或后n行(lead(expr, n))的expr的值
应用场景:查询前1名同学的成绩和当前同学成绩的差值


被折叠的 条评论
为什么被折叠?



