从employee表查询中检索薪水

时间:2012-12-23 08:17:56

标签: sql db2

我正在浏览此链接http://javarevisited.blogspot.in/2012/12/how-to-find-second-highest-or-maximum-salary-sql.html,该链接显示从Employee表中检索第二高工资,参考示例中显示的表格架构,请告知如何找到第3高或4 Th最高薪水来自员工表本身

3 个答案:

答案 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语法也可以使用,但我从未使用过。