题目描述
对所有员工的当前(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`));
示例输出:
emp_no salary rank
10005 94692 1
10009 94409 2
10010 94409 2
10001 88958 3
10007 88070 4
10004 74057 5
10002 72527 6
10003 43311 7
10006 43311 7
10011 25828 8
分析:
本题难点在于求出 rank的值,通过参考别人的想法,才想通这一点...
select s1.emp_no,s1.salary,count(distinct s2.salary) as rank
from salaries s1, salaries s2
-- 本题的关键在于求 rank
where s1.to_date='9999-01-01' and s2.to_date='9999-01-01' and s2.salary >= s1.salary
group by s1.emp_no
order by s1.salary desc,s1.emp_no asc