我想从员工表中打印第n 个最高工资。
查询是:
SELECT *
FROM emp E1
WHERE
(n-1) = (SELECT count(distinct(E2.salary))
FROM emp E2 Where
E2.salary< E1.salary)
ORDER BY
E1.salary ASC
虽然效果很好,但我无法解释它是如何工作的。任何人都可以点亮它吗?
这是 MYSQL 中的一个特性。
如果您有基本查询,则可以使用 LIMIT
-- get the 9th highest salary
SELECT salary FROM tbl_salary
ORDER BY salary DESC
LIMIT 9,1
如果它是一个复杂的查询,你可以使用
-- get the 9th highest salary
select distinct(salary) from tbl_salary e1
where 9 = (
select count(salary)
from tbl_salary e2
where e1.salary< e2.salary
)
可能更容易理解为:
select * From emp E1
where n = 1 +
(select count(distinct E2.salary)
from emp E2
Where E2.salary > E1.salary)
或者:
select * From emp E1
where n =(select count(distinct E2.salary)
from emp E2
Where E2.salary >= E1.salary)
对于外部查询中的每条记录,子查询返回同一张表上所有不同工资值的计数,这些值具有更高(或在第二个版本中)值;然后,外部查询中的相等条件确保只选择匹配n
更高薪水的记录。
原始order by
查询中的 是不必要的。