一、题目
有一个薪水表salaries简况如下:
对所有员工的薪水按照salary降序进行1-N的排名,要求相同salary并列且按照emp_no升序排列:
二、解题
1.窗口函数
SELECT emp_no,salary,
DENSE_RANK() OVER(ORDER BY salary DESC) as t_rank
FROM salaries
2.子查询
(1)因为比第一个工资大的工资只有0个,其排名为1,所以需要给
count(DISTINCT s2.salary)+1
(2)因为输出结果要求是1,2,2,3
所以需要对大于该数的值进行去重。
SELECT emp_no,salary,
(
SELECT count(DISTINCT s2.salary)+1
FROM salaries s2
WHERE s2.salary>s1.salary
)
FROM salaries s1
ORDER BY salary DESC