题目描述
对所有员工的当前(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分组并使用count进行聚合;其次是解决顺序问题,首先排序多个字段刚好就是先对第一个字段进行排序,然后在第一个字段基础上排序第二个字段,所以刚好实现了当前的需求。
select s1.emp_no,s1.salary,count(distinct s2.salary)
from salaries as s1 ,salaries as s2
where s1.to_date='9999-01-01'
and s2.to_date='9999-01-01'
and s1.salary<=s2.salary
group by s1.emp_no
order by s1.salary desc,s1.emp_no asc