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

相关推荐
m0_5287490010 小时前
sql基础查询
android·数据库·sql
知识分享小能手12 小时前
SQL Server 2019入门学习教程,从入门到精通,SQL Server 2019 开发企业人事管理系统 — 语法知识点及使用方法详解(21)
sql·学习·sqlserver
YIN_尹12 小时前
【MySQL】SQL里的“套娃”与“拼图”:子查询和合并查询
数据库·sql·mysql
秋氘渔12 小时前
MySQL EXPLAIN命令详解:SQL查询性能分析与优化指南(基础篇)
sql·mysql·adb
kyle~12 小时前
MySQL基础知识点与常用SQL语句整理
android·sql·mysql
青衫码上行12 小时前
高频SQL 50题 | 聚合
数据库·sql·mysql·leetcode·面试
有点心急102112 小时前
SQL 执行 MCP 工具开发(二)
数据库·sql
Francek Chen12 小时前
【大数据存储与管理】分布式文件系统HDFS:05 HDFS存储原理
大数据·hadoop·分布式·hdfs
m0_5287490013 小时前
复杂一点的sql查询
数据库·sql
_OP_CHEN15 小时前
【MySQL数据库基础】(一)保姆级 MySQL 环境配置教程!CentOS 7+Ubuntu 双系统全覆盖
linux·数据库·sql·mysql·ubuntu·centos·环境配置