HIVE SQL几种不同的分组排序函数比较

c 复制代码
--数据建表
drop table if exists db.tb_name;
create table if not exists db.tb_name
( `name` string
	,`class` string
	,score string
)
;
insert overwrite table db.tb_name
values
("a","1","100")
,("b","1","99")
,("c ","1","99")
,("d","2","100")
,("e ","2","100")
,("f ","3","86")
,("g","3","99")
,("h","3","99")
;

1.row_number()

c 复制代码
select a.*
	,row_number() over (partition by `class` order by cast(score as bigint) desc) as rn
from 
db.tb_name a
;

查询到的排序结果如下:

2.rank()

c 复制代码
select a.*
	,rank() over (partition by `class` order by cast(score as bigint) desc) as rn
from 
db.tb_name a
;

查询到的排序结果如下:

3.dense_rank()

c 复制代码
select a.*
	,dense_rank() over (partition by `class` order by cast(score as bigint) desc) as rn
from 
db.tb_name a
;

查询到的排序结果如下:

通过以上三种实例演示,发现row_number()不存在相同位次的情况,即使值大小一致,但在排序的时候,也会顺延往下一位。rank()若存在相同位次,下一个位次的计算会跳过之后的位次。dense_rank()若存在相同位次,下一个位次的计算不会跳过之后的位次,即虽然存在相同位次的情况,但是位次是连续不间断的。

相关推荐
智海观潮24 分钟前
Hive经典面试题之连续登录、行转列和列转行
数据仓库·hive·hadoop
面向星辰1 小时前
sql通配符(大量查找搜索索引)
数据库·sql
斐硕人1 小时前
SQL滚动求和
数据库·sql·mysql·maxcompute
爱吃土豆的马铃薯ㅤㅤㅤㅤㅤㅤㅤㅤㅤ2 小时前
java实现校验sql中,表字段在表里是否都存在,不存在的给删除掉
java·sql
baivfhpwxf20233 小时前
删除数据表SQL,不是删除数据,是删除表结构
数据库·sql
一只小青团3 小时前
Hadoop之javaAPI写HDFS的shell命令
大数据·hadoop·分布式
泰克教育官方账号3 小时前
泰涨知识 | 10分钟快速入门Hive之基本操作篇
数据仓库·hive·hadoop
howard20053 小时前
5.5 Hive导出数据实战
hive·导出数据
howard20054 小时前
5.3 Hive更新数据实战
hive·数据更新·事务表
码界奇点4 小时前
深入解析MySQL6存储过程游标与触发器的实战应用与性能优化
数据库·sql·性能优化·七牛云存储