前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >hive开窗函数-rank和dense_rank

hive开窗函数-rank和dense_rank

作者头像
数据仓库晨曦
发布2024-01-08 15:37:09
1360
发布2024-01-08 15:37:09
举报
文章被收录于专栏:数据仓库技术数据仓库技术

当我们需要对数据进行排序时,eank和sense_rank是两个非常有用的函数。在此文章中,我将向您介绍这两个函数并提供详细的语法说明。

  1. rank函数 rank函数返回一组值在指定排序顺序下的排名。如果有重复的值,则它们将被分配相同的排名,并且下一个排名将被跳过。

语法:

代码语言:javascript
复制
RANK() OVER ( [PARTITION BY partition_expression, ... [n]] ORDER BY sort_expression [ASC | DESC], ... [n] )

参数说明:

  • PARTITION BY:可选项,用于在分区内排序。
  • ORDER BY:指定排序顺序及其方向(升序或降序)。
  • 可选项 ASC 或DESC:默认为ASC(升序)。

示例:

代码语言:javascript
复制
SELECT name, score, RANK() OVER (ORDER BY score DESC) AS rank
FROM students;

输出:

name

score

rank

Alice

90

1

Bob

80

2

John

80

2

Mary

70

4

上述示例中,RANK()函数将根据学生的分数对他们进行排名。由于Bob和John拥有相同的得分,因此他们将被分配相同的排名,而下一个排名将被跳过。

  1. dense_rank函数 dense_rank函数与rank函数非常相似,但不会跳过任何排名。如果有重复的值,则它们将被分配相同的排名,但排名之间没有空缺。

语法:

代码语言:javascript
复制
DENSE_RANK() OVER ( [PARTITION BY partition_expression, ... [n]] ORDER BY sort_expression [ASC | DESC], ... [n] )

参数说明:

  • PARTITION BY:可选项,用于在分区内排序。
  • ORDER BY:指定排序顺序及其方向(升序或降序)。
  • 可选项 ASC 或DESC:默认为ASC(升序)。

示例:

代码语言:javascript
复制
SELECT name, score,DENSE_RANK() OVER (ORDER BY score DESC) AS dense_rank
FROM students;

输出:

name

score

dense_rank

Alice

90

1

Bob

80

2

John

80

2

Mary

70

3

上述示例中,DENSE_RANK()函数也将根据学生的分数对他们进行排名,但它不会跳过任何排名,所以Bob和John都被分配了第2名,而Mary则被分配了第3名。

总结:

在SQL中,Rank和Dense Rank函数非常有用,可以帮助我们快速对数据进行排名操作。当需要考虑排名之间是否留有空缺时,可以选择使用Rank或Dense Rank函数。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-03-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据仓库技术 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档