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

相关推荐
梦里不知身是客11几秒前
yarn向hive提交队列的方式
数据仓库·hive·hadoop
if时光重来37 分钟前
kingbase数据库指定数据表自增id重置
数据库·python·sql
jingyucsdn40 分钟前
将postgresql结构和数据备份成sql语句
数据库·sql·postgresql
梦里不知身是客111 小时前
explain分析SQL语句分析sql语句的优劣
java·数据库·sql
榮十一1 小时前
100道Java面试SQL题及答案
java·sql·面试
Direction_Wind2 小时前
Iceberg 与 Hive 用法区别
数据仓库·hive·hadoop
本旺2 小时前
【Starrocks + Hive 】BitMap + 物化视图 实战记录
大数据·数据仓库·hive
fvafuc2 小时前
常用odps(hive)语法
数据仓库·hive·hadoop
Yeniden2 小时前
Deepeek用大白话讲解 → 解释器模式(企业级场景1,规则引擎2,表达式解析3,SQL解析4)
java·sql·解释器模式
饕餮争锋10 小时前
SQL条件中WHERE 1=1 的功能
数据库·sql