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()若存在相同位次,下一个位次的计算不会跳过之后的位次,即虽然存在相同位次的情况,但是位次是连续不间断的。

相关推荐
谅望者1 小时前
SQL WHERE 详解:10 分钟内像专家一样过滤数据
sql
谅望者1 小时前
每个初学者都会犯的 7 个 SQL 错误(以及如何纠正它们)
sql
不剪发的Tony老师1 小时前
Yearning:一个免费开源的SQL审核平台
数据库·sql·mysql
Gauss松鼠会2 小时前
GaussDB慢sql信息收集和执行计划查看
数据库·sql·gaussdb
随心............5 小时前
sqoop采集完成后导致hdfs数据与Oracle数据量不符的问题。怎么解决?
hive·hadoop·sqoop
呼哧呼哧.15 小时前
Spring的核心思想与注解
数据库·sql·spring
嘗_15 小时前
sql特训
数据库·sql
橙汁味的风17 小时前
3关系型数据库的SQL语言
数据库·sql
蹦跶的小羊羔19 小时前
sql数据库语法
数据库·sql
PawSQL19 小时前
企业级SQL审核工具PawSQL介绍(1) - 六大核心能力
数据库·sql·oracle