对所有员工的当前(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,
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`));
解析:
对表中的salary进行排序,可以利用聚集函数COUNT()来统计相同一张表中的salary。当然这里的salary要根据不同的排序规则选择。
如题,要求薪水降序排序,那么COUNT()函数统计需要的条件是大于等于当前薪水的个数,那么得到的个数就是当前薪水在总薪水中的排名。这里要注意对于多个相同薪水,要去重,才能得到真正的排名。
分析到此,可以写出SQL语句,假设第一个salaries为s1,第二个salaries为s2.
SELECT s1.emp_no,s1.salary, COUNT(DISTINCT s2.salary) as sum
FROM salaries AS s1, salaries AS s2
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