MySQL中rank函数的使⽤题⽬来源:⽜客sql练习题
题⽬描述:
有⼀个薪⽔表salaries简况如下:
对所有员⼯的薪⽔按照salary降序进⾏1-N的排名,要求相同salary并列,且按照emp_no升序排列
分析:
这道题⽬考察的是SQL窗⼝函数(OLAP函数)中⽤于排序的专⽤窗⼝函数⽤法
下⾯介绍三种⽤于进⾏排序的专⽤窗⼝函数:
1、RANK()
在计算排序时,若存在相同位次,会跳过之后的位次。
例如,有3条排在第1位时,排序为:1,1,1,4······
2、DENSE_RANK()
这就是题⽬中所⽤到的函数,在计算排序时,若存在相同位次,不会跳过之后的位次。
例如,有3条排在第1位时,排序为:1,1,1,2······
3、ROW_NUMBER()
这个函数赋予唯⼀的连续位次。
例如,有3条排在第1位时,排序为:1,2,3,4······
窗⼝函数⽤法:
<;窗⼝函数> OVER ( [PARTITION BY <;列清单> ]
ORDER BY <;排序⽤列清单> )
*其中[ ]中的内容可以忽略
解答:
rank函数怎么用
select emp_no, salary, dense_rank() over(order by salary desc) as t_rank
from salaries
order by t_rank asc, emp_no asc;