Hive中sql partition by 、Group by、Over 、Rank、Dense_Rank()、Row_number()区别

本文介绍了Hive中Partition by与Group by的区别,以及Rank、Dense_Rank()和Row_number()在统计考试成绩前三名场景下的应用。Partition by允许在保留所有数据的同时对部分字段进行分组排序,而Group by则只保留分组字段和聚合结果。通过Over函数可以实现特定字段的排序。Rank()在并列第一时会跳过排名,Dense_Rank()则不会,保持连续排名。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们如何统计一个班级考试的课程的前三名?

 

已知表:

Lesson(no,course, score)

实例一:对比Partition by 与Group by

Select a.course, a.score from

(

    Select course, score, row_number() over(partition by course order by score desc) as n from lesson

) a

Where a.n <= 3

 

其中这里的partition by 与group by 的区别?

 

  • partition by相比较于group by,能够在保留全部数据的基础上,只对其中某些字段做分组排序;

  • group by只保留参与分组的字段和聚合函数的结果, group by可以实现同样的分组聚合功能,但sql语句不能写与分组聚合无关的字段,否则会报错,即group by 与over(partition by ......)主要区别为,带上group by的hive sql语句只能显示与分组聚合相关的字段,而带上over(partition by ......)的hive sql语句能显示所有字段;

<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杨鑫newlfe

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值