题解 | #对所有员工的薪水按照salary降序进行1-N的排名#
对所有员工的薪水按照salary降序进行1-N的排名
http://www.nowcoder.com/practice/b9068bfe5df74276bd015b9729eec4bf
- 从两个salaries里取数;
- 给定s1的金额,把s2里大于>=该金额的数提出来,比如s1对应的一行是8000,整个表里只有8000和8100>=8000,那么这个emp_no对应的就是这俩数;
- 根据emp_no做group by,得到每个员工对应的金额小于的所有值,然后再计算不重复值,即count(distinct s2.salary);
- 最后按金额降序。
代码:
select s1.emp_no, s1.salary, count(distinct s2.salary)
from salaries s1, salaries s2
where s1.salary <= s2.salary
group by s1.emp_no
order by s1.salary desc