对所有员工的当前(to_date=’9999-01-01’)薪水按照salary进行按照1-N的排名,相同salary并列且按照emp_no升序排列

    1. CREATE TABLE `salaries` (
    2. `emp_no` int(11) NOT NULL,
    3. `salary` int(11) NOT NULL,
    4. `from_date` date NOT NULL,
    5. `to_date` date NOT NULL,
    6. PRIMARY KEY (`emp_no`,`from_date`));

    1.select emp_no,salary, as rank
    2.按照emp_no升序排列

    1. SELECT s1.emp_no, s1.salary, COUNT(DISTINCT s2.salary) AS rank
    2. FROM salaries AS s1, salaries AS s2
    3. WHERE s1.to_date = '9999-01-01' AND s2.to_date = '9999-01-01' AND s1.salary <= s2.salary
    4. GROUP BY s1.emp_no
    5. ORDER BY s1.salary DESC, s1.emp_no ASC

    MySQL中不存在类似于SQL Server或Orcal中的rank()函数来得到排名。
    语雀内容

    1. select emp_no,salary,(
    2. @abc:=@abc+(@pre<>(@pre:=salary)
    3. )
    4. )as rank
    5. from salaries,(
    6. select @abc:=0,@pre:=-1
    7. )r
    8. where to_date='9999-01-01'
    9. order by salary desc,emp_no