SQL练习23:对所有员工的当前薪水按照salary进行按照1-N的排名
题目链接:牛客网
题目描述
对所有员工的当前(to_date='9999-01-01')
薪水按照salary
进行按照1-N的排名,相同salary
并列且按照emp_no
升序排列。
CREATE TABLE `salaries` (
`emp_no` int(11) NOT NULL,
`salary` int(11) NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`from_date`));
解法
根据题目的要求,可以使用窗口函数进行排序。
SELECT emp_no, salary, dense_rank() over (ORDER BY salary DESC) AS t_rank
FROM salaries
WHERE to_date = '9999-01-01';
三种排序的窗口函数:
RANK()
在排序时,若有相同位次,会跳过这些位次进行排序。
例如,有3条排在第1位时,排序为:1,1,1,4······DENSE_RANK()
在计排序时,若存在相同位次,不会跳过之后的位次。
例如,有3条排在第1位时,排序为:1,1,1,2······ROW_NUMBER()
这个函数赋予唯一的连续位次。
例如,有3条排在第1位时,排序为:1,2,3,4······