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

相关推荐
悟能不能悟19 小时前
在service方法中已经catch异常,Transactional失效怎么办
java·数据库·sql
zimoyin20 小时前
解决导入的数据库中因为 sql_mode 不同 视图无法打开问题
数据库·sql
码界奇点21 小时前
Java 开发日记MySQL 与 Redis 双写一致性策略挑战与实战解析
java·redis·sql·mysql·java-ee
NineData1 天前
NineData社区版 V4.6.0 正式发布!SQL 窗口新增4个数据源,新增支持OceanBase等多条数据复制和对比链路
数据库·sql·dba
那我掉的头发算什么1 天前
【数据库】增删改查 高阶(超级详细)保姆级教学
java·数据库·数据仓库·sql·mysql·性能优化·数据库架构
雨夜赶路人1 天前
SQL -- GROUP BY 基本语法
数据库·sql
迷了璐的航1 天前
mybatis解决查询中使用group by时出现sql_mode=only_full_group_by
数据库·sql·mybatis
悟能不能悟1 天前
mybatis的sql中,如果一个条件column=#{column},column的值为null时,会不会匹配出column is null 的记录
sql·tomcat·mybatis
2501_938773991 天前
《Hadoop 与 Spark 融合路径:基于 Spark on YARN 的部署与调优技巧》
大数据·hadoop·spark
2501_938773991 天前
大数据离线处理:使用 Airflow 调度 Hive 脚本的工作流设计
大数据·hive·hadoop