1. 程式人生 > >對所有員工的薪水按照salary進行按照1-N的排名

對所有員工的薪水按照salary進行按照1-N的排名

題目描述

對所有員工的當前(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