如何在不使用子查询的情况下在mysql中找到第二和第三高工资

时间:2016-08-23 03:38:49

标签: mysql

我知道这个查询但它是子查询可以任何人解释我困惑我在采访中问这个问题,但我无法解释正确

select * from dept e where 2 =(select count(distinct salary) from dept where e.salary<=salary)

5 个答案:

答案 0 :(得分:3)

试试这个非常简单:

SELECT id, dept_name, DISTINCT salary FROM dept_table DESC salary LIMIT 2 OFFSET 2

答案 1 :(得分:1)

您可以使用下面的SQL来获取数据。

select * 
from dept
where salary < max(salary)
order by salary desc
limit 2;

答案 2 :(得分:1)

您可以使用临时计数列无限制地执行此操作。

SELECT
    (@cnt := @cnt + 1) AS rowNumber, *
FROM dept AS t
  CROSS JOIN (SELECT @cnt := 0) AS dummy
ORDER BY t.salary DESC ;

您可以参考此example

答案 3 :(得分:0)

您可以按工资订购,只获得前三项,这些项目代表最高,第二高和第三高的薪水,如

select * 
from dept 
order by salary desc
limit 3;

答案 4 :(得分:-1)

您可以使用子查询以及使用Top关键字。 使用Top

SELECT TOP 2 salary 
FROM 
    (SELECT TOP 3 salary 
     FROM Table_Name 
     ORDER BY salary DESC) AS a 
ORDER BY salary ASC