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

相关推荐
电商API&Tina1 小时前
跨境电商如何接入1688官方寻源通接口?附接入流程
java·数据库·python·sql·oracle·json·php
武子康2 小时前
大数据-262 实时数仓 - Canal 同步数据实战指南 实时统计
大数据·hadoop·后端
PawSQL3 小时前
PawSQL平台功能月度更新 | 2026年2月
sql·pawsql·sql审核
夕除3 小时前
MVN--06
数据库·sql·mybatis
℡終嚸♂6803 小时前
SQL 注入:从原理到实战的完整指南
数据库·sql
AKA__Zas3 小时前
初识SQL(1.0 PLUS)
数据库·sql·学习方法
RInk7oBjo15 小时前
spring-事务管理
数据库·sql·spring
splage20 小时前
Oracle分页sql
数据库·sql·oracle
StarRocks_labs1 天前
StarRocks I/O 模型揭秘(一):查询是如何被拆解与调度的?
starrocks·sql·pipeline·mpp·fe
cTz6FE7gA1 天前
XSS、CSRF、SQL注入、防重放与敏感数据保护的分层策略
sql·xss·csrf