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

相关推荐
Treh UNFO1 小时前
SQL 注入详解:原理、危害与防范措施
数据库·sql·oracle
历程里程碑2 小时前
MySQL视图:虚拟表的实战技巧
java·开发语言·数据库·c++·sql·mysql·adb
RATi GORI2 小时前
SQL中的DISTINCT、SQL DISTINCT详解、DISTINCT的用法、DISTINCT注意事项
java·数据库·sql
你觉得脆皮鸡好吃吗2 小时前
SQL注入总概述
数据库·sql·网络安全学习
菜鸟小码3 小时前
Hive数据类型全解析:从基础到复杂类型实战指南
数据仓库·hive·hadoop
IT从业者张某某4 小时前
Docker部署伪分布Hadoop
hadoop·docker·容器
Gauss松鼠会4 小时前
【GaussDB】浅谈SQL与ETL
数据库·数据仓库·sql·etl·gaussdb·经验总结
隐于花海,等待花开4 小时前
1.CONCAT / CONCAT_WS 函数深度解析
大数据·hive
菜鸟小码4 小时前
深入浅出 Hive 数据类型:从入门到实战
数据仓库·hive·hadoop
Java后端的Ai之路6 小时前
Text-to-SQL与智能问数完全指南:基本概念、核心原理、Python实战教学及企业项目落地
数据库·python·sql·text-to-sql·智能问数