这是SQL今日一题的第19篇文章
题目描述
对所有员工的当前(to_date='9999-01-01')薪水按照salary进行按照1-N的排名,相同salary并列且按照emp_no升序排列
用到的是salaries表
salaries表
题目给了输出展示表如下,注意第2条和第3条记录,薪资相同,排名都为2。
方法1
select s1.emp_no,s1.salary,count(distinct s2.salary) as rank
from salaries s1,salaries s2
where s1.salary <= s2.salary
and s1.to_date = '9999-01-01'
and s2.to_date = '9999-01-01'
group by s1.emp_no,s1.salary
order by s1.salary desc,s1.emp_no asc
1、这题的难点在于对1-N的排名的理解,在计算排序时,若存在相同位次,不会跳过之后的位次,比如有3条数据排名都是1,那么排序为1,1,1,2。
2、本题的思想在于对salaries表的复用。
3、先从sa