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

相关推荐
少年攻城狮3 小时前
Mybatis-Plus系列---【自定义拦截器实现sql完整拼接及耗时打印】
数据库·sql·mybatis
迷茫的21世纪的新轻年4 小时前
PostgreSQL——SQL优化
数据库·sql·postgresql
2301_800256115 小时前
8.3 查询优化 核心知识点总结
大数据·数据库·人工智能·sql·postgresql
MM_MS7 小时前
MYSQl数据库详细知识点和在Navicat中的具体操作
开发语言·数据库·sql·mysql·oracle
爱吃土豆的马铃薯ㅤㅤㅤㅤㅤㅤㅤㅤㅤ8 小时前
sql计算去除值后面的零
数据库·sql
ChrylZzz8 小时前
【SQL】大小表查询、更新表语句
数据库·sql
还是大剑师兰特8 小时前
Hadoop入门基础教程(110 问题+ 答案)
hadoop·大剑师·hadoop教程·hadoop入门
爱尔兰极光8 小时前
数据库基本操作(下)
数据库·sql
笨蛋少年派8 小时前
Sqoop数据迁移简介
hive·hadoop·sqoop
zhangkaixuan4569 小时前
Flink Checkpoint 全生命周期深度解析
大数据·hadoop·flink·apache·paimon