23. 對所有員工的薪水按照salary進行按照1-N的排名
阿新 • • 發佈:2018-11-08
題目描述
對所有員工的當前(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 |
思路:題目給的輸出跟題目描述不符,輸出是按照salary降序排列的。所以寫程式碼時還是得根據輸出來寫。
SELECT s1.emp_no, s1.salary, count(DISTINCT s2.salary) AS rank FROM salaries s1, salaries 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;