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

如何在不使用子查询的情况下查找mysql中的第二和第三高薪,mysql,Mysql,我知道这个问题,但它是子问题。有人能解释我的困惑吗?我在面试中问了这个问题,但我不能正确解释 select * from dept e where 2 =(select count(distinct salary) from dept where e.salary<=salary) 您可以按薪资订购,只获得前3项,分别代表最高、第二高和第三高薪资,如 select * from dept order by salary desc limit 3; 您可以按薪资订购,只获得前3项,分

我知道这个问题,但它是子问题。有人能解释我的困惑吗?我在面试中问了这个问题,但我不能正确解释

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

您可以按薪资订购,只获得前3项,分别代表最高、第二高和第三高薪资,如

select * 
from dept 
order by salary desc
limit 3;

您可以按薪资订购,只获得前3项,分别代表最高、第二高和第三高薪资,如

select * 
from dept 
order by salary desc
limit 3;

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

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

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

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

试试这个,非常简单:

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

试试这个,非常简单:

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

您可以不受限制地使用临时计数列

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

您可以参考此

您可以不受限制地使用临时计数列

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

您可以参考此

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

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

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

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

在where条件下,你不能像那样使用max函数。只有在有子句的情况下才有可能,没有限制,你不能在where条件下使用max函数。只有在有子句的情况下才有可能在没有limit@sms,则必须使用子查询如何在没有limit@sms,那么您必须使用subqueryplease让我知道上面的查询是sub queryplease让我知道上面的查询是sub queryplease让我知道上面的查询是sub queryhow to fetch and Limited查看向上投票是否可能或不奇怪,这个问题有很多错误。。。不能对特定列使用distinct;不按顺序使用desc。检查文档如何不受限制地获取是否可能或不奇怪地看到upvotes,此查询中有太多错误。。。不能对特定列使用distinct;不按顺序使用desc。检查文档这是一个更好的答案。这是一个更好的答案。原始问题说“无子查询”原始问题说“无子查询”