我想从员工表中打印第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
虽然它运作良好,但我无法解释它的工作原理。任何人都可以对它有所了解吗?
答案 0 :(得分:2)
这是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
)
答案 1 :(得分:1)
可能更容易理解为:
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
是不必要的。