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

相关推荐
Rverdoser8 小时前
【SQL】多表查询案例
数据库·sql
敲敲敲-敲代码8 小时前
【SQL实验】触发器
数据库·笔记·sql
和道一文字yyds8 小时前
MySQL 中的索引数量是否越多越好?为什么?如何使用 MySQL 的 EXPLAIN 语句进行查询分析?MySQL 中如何进行 SQL 调优?
数据库·sql·mysql
小刘|10 小时前
深入理解 SQL 注入漏洞及解决方案
数据库·sql
数巨小码人10 小时前
QT SQL框架及QSqlDatabase类
jvm·sql·qt
哆木11 小时前
排查生产sql查询缓慢
数据库·sql·mysql
羊小猪~~15 小时前
MYSQL学习笔记(九):MYSQL表的“增删改查”
数据库·笔记·后端·sql·学习·mysql·考研
桃林春风一杯酒17 小时前
HADOOP_HOME and hadoop.home.dir are unset.
大数据·hadoop·分布式
史迪仔011217 小时前
[SQL] 事务的四大特性(ACID)
数据库·sql
clarance201517 小时前
聊聊 FocusSearch/focus_mcp_sql:Text2SQL 的新玩法
数据库·sql