我们如何统计一个班级考试的课程的前三名?
已知表:
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语句能显示所有字段;