首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >第N(Th)最高薪资查询

第N(Th)最高薪资查询
EN

Stack Overflow用户
提问于 2014-01-02 16:02:15
回答 2查看 693关注 0票数 4

我找到了一个从网络上找到第n(Th)最高薪水的解决方案:

代码语言:javascript
复制
SELECT * FROM Employee Emp1
WHERE (N-1) = (
           SELECT COUNT(DISTINCT(Emp2.Salary))
           FROM Employee Emp2
           WHERE Emp2.Salary > Emp1.Salary
           )

但我无法理解查询实际上是如何执行的,即查询在每个步骤中是如何处理的,特别是在同一个表的多个别名出现->的子查询中

代码语言:javascript
复制
WHERE Emp2.Salary > Emp1.Salary

比较运算符对此做了什么-

代码语言:javascript
复制
WHERE (N-1) = <subquery>

有没有人能帮我一下?

EN

回答 2

Stack Overflow用户

发布于 2014-01-02 16:20:39

第N个最高工资是指有N-1个更高的工资,例如,最高的工资没有更高的工资

对查询进行以下更改应演示其工作原理:

代码语言:javascript
复制
SELECT * FROM Employee Emp1
CROSS APPLY
           (
           SELECT COUNT(DISTINCT(Emp2.Salary)) AS NHigher
           FROM Employee Emp2
           WHERE Emp2.Salary > Emp1.Salary
           ) X;

Sql Server here的小提琴

但是请注意,大多数关系型数据库都允许OFFSETLIMIT类型限制,这将允许您使用普通的ORDER BY更有效地检索第N行。

例如,在SQL Server 2012中,要获取第二高的薪水:

代码语言:javascript
复制
SELECT *
FROM Employee Emp1
ORDER BY SALARY DESC
OFFSET 1 ROWS FETCH NEXT 1 ROWS ONLY;
票数 4
EN

Stack Overflow用户

发布于 2014-01-02 17:02:47

编辑:这个问题是问如何获得n(th)最高的薪水或前n(th)薪水?下面的示例说明了如何获得前n(th)个薪水只需将第2行WHERE emp.Salary =更改为WHERE emp.Salary >= :D

对此有一种解决方案:

  1. take N top salary
  2. get the employees that have

现在你可以用你喜欢的方式来实现它:

第一个解决方案分组工资:

代码语言:javascript
复制
SELECT * FROM Employee as emp
WHERE emp.Salary = 
(
    SELECT TOP 1 t.Salary FROM 
    (
        SELECT TOP N(th) e.Salary FROM Employee as e
        Group by e.Salary
        Order By e.Salary
    ) as t
    ORDER BY t.Salary DESC
)

第二种解决方案不同的薪水:

代码语言:javascript
复制
SELECT * FROM Employee as emp
WHERE emp.Salary = 
(
    SELECT TOP 1 t.Salary FROM 
    (
        SELECT DISTINCT TOP N(th) e.Salary FROM Employee as e
        Order By e.Salary
    ) as t
    ORDER BY t.Salary DESC
)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20878714

复制
相关文章

相似问题

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