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

相关推荐
前进的李工8 小时前
SQL聚合函数与分组查询详解
数据库·sql·mysql
lkbhua莱克瓦2412 小时前
基础-函数
开发语言·数据库·笔记·sql·mysql·函数
今天有个Bug12 小时前
【计算机毕业设计】流浪动物救助平台 - SpringBoot+Vue
sql·mysql·spring·vue·毕业设计·课程设计
l1t15 小时前
一个postgresql奇怪慢查询现象的原因和解决
数据库·sql·postgresql·性能优化
默 语17 小时前
Spring Boot 3.x升级踩坑记:到底值不值得升级?
hive·spring boot·后端
lkbhua莱克瓦2419 小时前
基础-SQL-DML
开发语言·数据库·笔记·sql·mysql
l1t21 小时前
PostgreSQL Distinct On 关键字的用法
数据库·sql·postgresql
2401_8322981021 小时前
云服务器 vs 传统物理服务器,企业该如何选择?
sql
ha_lydms1 天前
4、Spark 函数_m/n/o/p/q/r
大数据·数据库·python·sql·spark·数据处理·dataworks
ha_lydms1 天前
2、Spark 函数_a/b/c
大数据·c语言·hive·spark·时序数据库·dataworks·数据开发