我正在浏览此链接http://javarevisited.blogspot.in/2012/12/how-to-find-second-highest-or-maximum-salary-sql.html,该链接显示从Employee表中检索第二高工资,参考示例中显示的表格架构,请告知如何找到第3高或4 Th最高薪水来自员工表本身
答案 0 :(得分: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
答案 1 :(得分:1)
select * from (
select * from employee
order by salary desc
limit 4) x
order by salary
limit 1;
您应用两个限制:一个用于内部查询以获取前四行,然后是另一个限制以从中获取最低行。
答案 2 :(得分: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
语法也可以使用,但我从未使用过。