2

我正在通过这个链接http://javarevisited.blogspot.in/2012/12/how-to-find-second-highest-or-maximum-salary-sql.html显示从 Employee 表中检索第二高薪水, 参考示例中的表模式,请教如何从员工表本身中找到第三高或第四高的薪水

4

3 回答 3

2

那里有一个示例说明对于 MySQL,您可以通过

SELECT salary FROM 
  (SELECT salary FROM Employee ORDER BY salary DESC LIMIT 2) AS emp 
ORDER BY salary LIMIT 1

如果您替换23,您将获得第三高。子查询选择n最高薪水,然后外部查询选择该结果中最低的。

该方案可以与任何 RDBMS 一起使用,只是语法略有不同。对于 DB2,我认为以下应该有效(但我目前无法验证):

SELECT salary FROM 
  (SELECT salary FROM Employee ORDER BY salary DESC FETCH FIRST 2 ROWS ONLY) AS emp 
ORDER BY salary FETCH FIRST ROW ONLY
于 2012-12-23T09:37:08.970 回答
1
select * from (
  select * from employee
  order by salary desc
  limit 4) x
order by salary
limit 1;

您应用两个限制:一个用于内部查询以获取前 4 行,然后另一个限制用于从中获取最低行。

于 2012-12-23T09:39:32.967 回答
1

您最好的办法是使用DENSE_RANKOLAP 函数来定义排名,然后选择您需要的任何有序值。例如,要查找第三高的薪水:

SELECT MAX(salary)
FROM (
   SELECT DENSE_RANK() OVER (ORDER BY salary DESC) AS rank
        , salary 
   FROM employee
   ) AS xxx
WHERE rank = 3

DENSE_RANK将处理数据中的任何“关系”。由于可能有不止一名员工具有相同的薪水,因此请使用该MAX功能仅保留一名。该limit 1语法也可能有效,但我从未使用过。

于 2012-12-23T15:13:06.233 回答