我正在通过这个链接http://javarevisited.blogspot.in/2012/12/how-to-find-second-highest-or-maximum-salary-sql.html显示从 Employee 表中检索第二高薪水, 参考示例中的表模式,请教如何从员工表本身中找到第三高或第四高的薪水
问问题
993 次
3 回答
2
那里有一个示例说明对于 MySQL,您可以通过
SELECT salary FROM
(SELECT salary FROM Employee ORDER BY salary DESC LIMIT 2) AS emp
ORDER BY salary LIMIT 1
如果您替换2
为3
,您将获得第三高。子查询选择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_RANK
OLAP 函数来定义排名,然后选择您需要的任何有序值。例如,要查找第三高的薪水:
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 回答