SQL练习23:对所有员工的当前薪水按照salary进行按照1-N的排名

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······

猜你喜欢

转载自blog.csdn.net/qq_43965708/article/details/113575744