Hive中三种排序函数的区别

排序函数

RANK() 排序相同时会重复,总数不会变

DENSE_RANK() 排序相同时会重复,总数会减少

ROW_NUMBER() 会根据顺序计算

案例演示

1.原始数据

name	subject	score
孙悟空	语文	    87
孙悟空	数学    	95
孙悟空	英语	    68
大海	    语文	    94
大海	    数学	    56
大海	    英语	    84
宋宋	    语文	    64
宋宋	    数学	    86
宋宋	    英语	    84
婷婷	    语文	    65
婷婷	    数学	    85
婷婷	    英语	    78

2.执行sql

select name,
subject,
score,
rank() over(partition by subject order by score desc) rp,
dense_rank() over(partition by subject order by score desc) drp,
row_number() over(partition by subject order by score desc) rmp
from score;

3.结果展示 

name    subject score   rp      drp     rmp

孙悟空   数学      95       1       1       1

宋宋     数学      86        2       2       2

婷婷     数学      85        3       3       3

大海     数学      56        4       4       4

宋宋     英语      84        1       1       1

大海     英语      84        1       1       2

婷婷     英语      78        3       2       3

孙悟空   英语     68       4       3       4

大海     语文      94        1       1       1

孙悟空   语文     87       2       2       2

婷婷     语文      65        3       3       3

宋宋     语文      64        4       4       4

HiveSQL中,有几个常用的排序函数,包括rank、dense_rank和row_number。这些函数可以用来对查询结果进行排序和生成序号。 rank函数是对查询结果进行排名,考虑over子句中排序字段值相同的情况。如果使用rank函数来生成序号,over子句中排序字段值相同的序号是一样的,后面字段值不相同的序号将跳过相同的排名号排下一个。rank函数的使用方法与row_number函数完全相同。例如,可以使用以下语句在HiveSQL中使用rank函数来生成序号: ``` SELECT RANK() OVER (ORDER BY column_name) AS rank, * FROM table_name; ``` dense_rank函数与rank函数类似,但在生成序号时是连续的。当出现相同排名时,dense_rank函数不会跳过相同排名号,而是紧接上一次的rank值。在各个分组内,rank()是跳跃排序,有两个第一名时接下来就是第四名,dense_rank()是连续排序,有两个第一名时仍然跟着第二名。可以使用以下语句在HiveSQL中使用dense_rank函数来生成序号: ``` SELECT DENSE_RANK() OVER (ORDER BY column_name) AS dense_rank, * FROM table_name; ``` row_number函数是最简单的排序函数,它为每一行生成一个唯一的序号,不考虑排序字段值相同的情况。可以使用以下语句在HiveSQL中使用row_number函数来生成序号: ``` SELECT ROW_NUMBER() OVER (ORDER BY column_name) AS row_number, * FROM table_name; ``` 以上是HiveSQL中常用的排序函数的用法。根据具体的需求,可以选择合适的函数来生成序号。 #### 引用[.reference_title] - *1* *2* [【数据库】HIVE SQL几种排序函数(ROW_NUMBER&RANK&DENSE_RANK)](https://blog.csdn.net/Jarry_cm/article/details/81904294)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [数据分析EPHS(11)-详解Hive中的排序函数](https://blog.csdn.net/abcdefg90876/article/details/105085553)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值