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

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

 

已知表:

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语句能显示所有字段;

 

实例二:Over函数的写法

Over (partition by course by score)

先对course进行分区,在course相同的情况下对score做排序

 

实例三、row_number换成rank()

Select a.course, a.score from

(

    Select course, score, rank() over(partition by course order by score des

你可能感兴趣的:(数据仓库,大数据挖掘与大数据应用案例)