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

相关推荐
UGOTNOSHOT40 分钟前
每日八股文6.3
数据库·sql
IvanCodes1 小时前
七、Sqoop Job:简化与自动化数据迁移任务及免密执行
大数据·数据库·hadoop·sqoop
冬至喵喵3 小时前
【hive】函数集锦:窗口函数、列转行、日期函数
大数据·数据仓库·hive·hadoop
Lx3523 小时前
LIKE查询中索引有效利用的前缀匹配策略
后端·sql·oracle
岁忧4 小时前
LeetCode 高频 SQL 50 题(基础版)之 【高级字符串函数 / 正则表达式 / 子句】· 上
sql·算法·leetcode
bbsh20996 小时前
WebFuture 升级提示“不能同时包含聚集KEY和大字段””的处理办法
数据库·sql·mysql·webfuture
刘 大 望15 小时前
数据库-联合查询(内连接外连接),子查询,合并查询
java·数据库·sql·mysql
Theodore_102217 小时前
大数据(2) 大数据处理架构Hadoop
大数据·服务器·hadoop·分布式·ubuntu·架构
cookqq17 小时前
mongodb源码分析session异步接受asyncSourceMessage()客户端流变Message对象
数据库·sql·mongodb·nosql
簌簌曌18 小时前
CentOS7 + JDK8 虚拟机安装与 Hadoop + Spark 集群搭建实践
大数据·hadoop·spark