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

相关推荐
凤山老林5 小时前
ORM 框架性能调优:Spring Boot 下 N+1 查询根因治理、动态 SQL 优化与 Fetch 策略实战
数据库·spring boot·sql
神秘的MT6 小时前
SQL Server 分页查询 ROW_NUMBER () OFFSET...FETCH游标(Cursor) 数据插入
数据库·sql·学习·c#·winform
味悲8 小时前
SQL注入从入门到实战
数据库·sql·安全
龙仔72520 小时前
SQL Server 创建只读账号完整操作(分两种场景:SSMS图形界面 + T-SQL脚本)
数据库·sql·oracle
Csvn1 天前
📊 SQL 入门 Day 2:排序与去重 — 让数据有序呈现
sql
龙仔7251 天前
SQL Server 批量多库只读账号一键脚本(带逐行注释完整脚本 + 分段逐句详细解释)
服务器·数据库·sql·sqlserver·dba
明天谭1 天前
EzCloud自定义BI报表模块源码解析:动态SQL查询、可视化图表与多租户数据统计实现
数据库·sql·数据报表·bi可视化·ezcloud·java动态sql
爸爸6191 天前
30 原始 SQL 查询与聚合统计:querySql 实战
数据库·sql·华为·harmonyos·鸿蒙系统
牛奶咖啡131 天前
大数据Hadoop运维应用实践——双NameNode高可用Hadoop集群架构(上)
hadoop·高可用hadoop集群搭建·给服务器做免密信任·修改服务器主机名称·服务器本地配置主机名与ip映射·服务器配置jdk环境·服务器安装zooker
喜欢的名字被抢了2 天前
Python实战:SQLAlchemy ORM与FastAPI项目集成
开发语言·python·sql·教程·fastapi