浅析row_number()函数【HQL】
程序员文章站
2022-07-13 11:10:49
...
语法格式:row_number() over(partition by 分组列 order by 排序列 desc)
row_number() over()分组排序功能:
在使用 row_number() over()函数时候,over()里头的分组以及排序的执行晚于 where 、group by、 order by 的执行。
说不如来个实例:
创表
create table t1(id int,name String,class String,score int)
row format delimited fields terminated by "," ;
加载数据
load data local inpath "/root/t1" into table t1;
实例一
对所有数据进行排序,无分组
select *,row_number() over(order by score desc) r from t1
结果展示
实例二
分组排序,根据class分组根据成绩排序
select id,
name,
class,
score,
row_number() over(partition by class order by score desc) rank
from t1;
结果展示
实例三
在实例二中已经做到了分组排序,不过对于我们的需求一般针对于前几位,也就是topN,如下:
select t.id,t.name,t.class,t.score from
(select id,
name,
class,
score,
row_number() over(partition by class order by score desc) rank
from t1) t where t.rank < 4;
结果展示
希望这篇博客能让你对row_number()函数有一定的认识。欢迎交流~