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

相关推荐
知识即是力量ol1 分钟前
口语八股——MySQL 核心原理系列(终篇):SQL优化篇、日志与主从复制篇、高级特性篇、面试回答技巧总结
sql·mysql·面试·核心原理
xutSwIpZotzM5 小时前
量产HX711电子秤采集模块全套资料,包含原理图、PCB文件、BOM以及源码HEX,支持串口波...
hadoop
不剪发的Tony老师6 小时前
FlySpeed:一款通用的SQL查询工具
数据库·sql
ℳ₯㎕ddzོꦿ࿐8 小时前
[特殊字符] 【踩坑记录】没调 startPage(),SQL 却被自动分页了?
数据库·sql
SQL必知必会8 小时前
SQL 描述性统计:超越平均值和计数
数据库·sql
ActionTech8 小时前
数据集推荐 06 | 首款 NL2GeoSQL 的测试基准和数据集来了!
数据库·人工智能·sql
码云数智-大飞8 小时前
跳出索引思维定式:一次基于业务逻辑的非典型 SQL 优化实践
数据库·sql
山岚的运维笔记9 小时前
SQL Server笔记 -- 第46章 窗口函数
数据库·笔记·sql·microsoft·sqlserver
SQL必知必会9 小时前
使用 SQL 构建转化漏斗
数据库·sql·数据分析
云游云记10 小时前
php crm客户属性字段变更记录:业务合规与数据可信的核心保障
sql·php·crm