rank 开窗函数_SQL常用函数(1)开窗函数over()

关键词:hsql ;over([partition by ...][order by ...])

业务分析中经常会遇到一类需求:对组内数据进行排序或者统计组内TopN数据和,同样作为高频应用函数也受到各大厂面试官的亲睐,成为面试官判断应试者SQL水平的一个考察点,文档将从开窗函数的语法结构,函数方法结合实例进行详细介绍。

-1-

语法结构

 over ([partition by col1,col2]---分组列名,可多个               [order by col3 ]---排序列名,可多个,降序排列                )

11785cc92c4aded2f1ad68083d0589cc.png

-2-

函数解析

结合实际例子我们看一下各个函数的作用:

2.1 排序函数

排序函数就像它对名字一样,是指对数据进行排序。

对比row_number、rank、dense_rank三个函数:

相同点:按照分组变量进行分组,依据排序变量对取值升序(或降序);

差异点:排序后的顺序值不同,见下表(以地区分组,以销售额排序);

row_number:连续排序,序号为从1到n连续不间断取值,假如2个数据并列第1,并列第1的两行序号依次为1和2,第三个数据序号为3;

row_number()over(partition by region order by sale desc)

rank:跳跃排序,假如2个数据并列第1,在两个序号1后,第三个数据序号为3;

rank()over(partition by region order by sale desc)

dense_rank :顺序排序,假如2个数据并列第1,在两个序号1后,第三个数据序号为2;

dense_rank()over(partition by region order by sale desc)

regioncitysalerow_numberrankdense_rank
华北廊坊90111
华北秦皇岛90211
华北保定87332
华北天津76443
东北哈尔滨98111
东北大连76222
东北齐齐哈尔75333
东北沈阳70444

2.2 聚合函数

聚合函数是按照分组变量对变量进行聚合操作。我们以sum详细说明,count、max、min、agv类似。

sum:累计求和,指从第一行至当前行求和,也可以指定从哪一行开始至哪一行结束求和;

sum(sale)over(partition by region order by sale desc)-从第1行累计至当前行,以下表为例,以区域进行分组,按照销售额降序排列,第3行计算的sum值是指第1行廊坊销售额+第2行秦皇岛销售额+第3行保定销售额=90+90+87;

sum(sale)over(partition by region order by sale desc between 1 preceding and 1 following)-从当前行往上1行至往后1行,仍以第3行为例,第3行计算的sum值是指第2行秦皇岛销售额+第3行保定销售额+第4行天津销售额=90+87+76;

regioncitysalesumcountmaxminavg
华北廊坊90901909090
华北秦皇岛901802909090
华北保定872673908789
华北天津763434907685.75
东北哈尔滨98981989898
东北大连761742987687
东北齐齐哈尔752493987583
东北沈阳703194987079.75
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值