前言
在sql中有一类函数叫做聚合函数,例如sum()、avg()、max()等等,这类函数可以将多行数据按照规则聚集为一行,一般来讲聚集后的行数是要少于聚集前的行数的。但是,哟偶是我们想要既显示聚集后的数据,这时我们便引入了窗口函数。
一、什么是开窗函数
1、概念
好像给每一份数据开一扇窗户,所以叫开窗函数
2、开窗函数都有哪些
(1)row_number 无并列排名
用法:
select xxxx,row_number() over (partition by 分组字段 order by 排序字段 desc) as rn from 需要查询的表 group by xxxx
(2)dense_rank:并列排名,并且依次递增
select *,dense_rank() over (partition by clazz order by score desc) as s from new_score;
(3)rank:有并列排名,不依次递增
select *,rank() over (partition by clazz order by score desc) as s from new_score;
(4)percent_rank: (rank的结果-1)/(分区内数据的个数-1)
select *,percent_rank() over (partition by clazz order by score desc) as s from new_score;
(5)cume_dist: 计算某个窗口或分区中某个值的累计分布
假定升序排序,则使用以下公式确定累积分布: 小于等于当前值x的行数 / 窗口或partition分区内的总行数。其中,x 等于 order by 子句中指定的列的当前行中的值。
select *,cume_dist() over (partition by clazz order by score desc) as s from new_score;

本文介绍了Hive中的开窗函数,包括row_number、dense_rank、rank、percent_rank、cume_dist、NTILE及聚合函数的用法,并通过实例展示了如何使用。同时,详细解释了窗口帧的概念、格式和应用场景,包括rows与range的区别。
最低0.47元/天 解锁文章
1895

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



