澄清MySQL查询

时间:2013-03-04 10:58:43

标签: mysql database join

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

虽然它运作良好,但我无法解释它的工作原理。任何人都可以对它有所了解吗?

2 个答案:

答案 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是不必要的。