首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从employee表查询中检索薪水

从employee表查询中检索薪水
EN

Stack Overflow用户
提问于 2012-12-23 16:17:56
回答 3查看 987关注 0票数 2

我正在浏览这个链接http://javarevisited.blogspot.in/2012/12/how-to-find-second-highest-or-maximum-salary-sql.html,它显示了从Employee表中检索第二高的工资,引用示例中所示的表架构,请建议如何从employee表中找到第三高的或第四高的工资

EN

回答 3

Stack Overflow用户

发布于 2012-12-23 17:37:09

有一个示例解释了对于MySQL,您可以获得第二高的via

代码语言:javascript
复制
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,我认为以下方法应该可以工作(但我目前无法验证):

代码语言:javascript
复制
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
票数 2
EN

Stack Overflow用户

发布于 2012-12-23 17:39:33

代码语言:javascript
复制
select * from (
  select * from employee
  order by salary desc
  limit 4) x
order by salary
limit 1;

您应用了两个限制:一个用于内部查询以获取前4行,另一个限制用于获取这些行中的最低行。

票数 1
EN

Stack Overflow用户

发布于 2012-12-23 23:13:06

最好的方法是使用DENSE_RANK OLAP函数定义一个排名,然后选择所需的排序值。例如,要查找第三高的薪水:

代码语言:javascript
复制
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语法也可能有效,但我从未使用过它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14009594

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档