-5

我想从员工表中打印第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

虽然效果很好,但我无法解释它是如何工作的。任何人都可以点亮它吗?

4

2 回答 2

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
)
于 2013-03-04T11:15:12.440 回答
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查询中的 是不必要的。

于 2013-03-04T11:19:36.170 回答