面试的时候,只要这个工作要求SQL能力,面试官必然会问SQL怎么实现分组排序?刚开始,我一直以为是没有分组排序这个函数的。直到第一次去面试腾讯时,笔试题目中有一题是分组排序,我写得是变量赋值排序。面试官一脸懵逼的看着我,又问道有什么直接的函数吗?这一问,真把我难住了。这位面试官比较nice,很耐心的跟我说:你回去查查这个三个函数的用法及区别rank()over()、row_number()over()、dense_rank()over()
1.row_number()over()分组排序功能:
在使用 row_number() over()函数时候,over()里头的分组以及排序的执行晚于 where group by order by 的执行。 partition by 用于给结果集分组,如果没有指定那么它把整个结果集作为一个分组,它和聚合函数不同的地方在于它能够返回一个分组中的多条记录,而聚合函数一般只有一个反映统计值的记录。
例:employee,根据部门分组排序
select empno,workdept,salary,row_number()over(partition by workdept order by salary desc)
as rank from data.employee
2.rank()over()是跳跃排序,有两个第二名时接下来就是第四名(同样是在各个分组内)
select workdept,salary,rank()over(partition by workdept order by salary de