首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于查找第二高的SQL

用于查找第二高的SQL
EN

Stack Overflow用户
提问于 2013-03-08 03:00:02
回答 3查看 414关注 0票数 0

假设我有一个雇员表,其中我在一列中保存了雇员的姓名,在另一列中保存了他们领取的薪水。我应该写什么SQL来找到拿到第二高薪水的员工的名字?

EN

回答 3

Stack Overflow用户

发布于 2013-03-08 03:26:40

我会使用row_number()

代码语言:javascript
复制
select e.*
from (select e.*, row_number() over (order by salary desc) as seqnum
      from employees e
     ) e
where seqnum = 1

其他人提到了limit/top/rownum方法:

代码语言:javascript
复制
select e.*
from (select e.*
      from employees e
      order by salary desc
      limit 2
     ) t
order by salary
limit 1

您可以使用offset执行相同的操作:

代码语言:javascript
复制
select e.*
from employees e
order by salary desc
limit 2, 1

然而,如果你有一条领带来获得最高的薪水,那么所有这些都有问题。第一种方法很容易修复,只需用dense_rank()替换row_number()即可

代码语言:javascript
复制
select e.*
from (select e.*, dense_rank() over (order by salary desc) as seqnum
      from employees e
     ) e
where seqnum = 1

另外,另一种方法是:

代码语言:javascript
复制
select e.*
from employees e
where e.salary < (select max(salary) from employees)
order by salary desc
limit 1  -- or top 1 or rownum = 1 etc.
票数 2
EN

Stack Overflow用户

发布于 2013-03-08 03:02:39

您可以尝试从"Top 2“中进行选择,按升序排序,然后是"Top 1”,它应该会给出正确的行。

票数 1
EN

Stack Overflow用户

发布于 2013-03-08 03:03:24

你可以这样做:

代码语言:javascript
复制
select * from (select * from Employees order by salary desc limit 2) as A order by salary asc limit 1;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15279506

复制
相关文章

相似问题

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