【问题标题】:Query to find least fifth salaried employee [duplicate]查询以查找至少第五名受薪员工[重复]
【发布时间】:2018-04-09 06:10:16
【问题描述】:
EMPID NAME DEPTID SALARY
---------- ------------------------------------------ --
101 surendra 201 1000
102 narendra 202 2000
103 rajesh 203 3000
104 ramesh 203 2000
105 hanumanth 202 10000

a) 写一个查询来找到至少第 5 位(第 5 位的最低薪水) 最低工资)受薪员工?

b) 查询各部门收入最高的员工

【问题讨论】:

  • here
  • 你试过了吗?这闻起来像家庭作业。
  • 有点像@Tim Biegeleisaen ...但我想不通

标签: sql oracle greatest-n-per-group


【解决方案1】:

a) 编写查询以查找第 5 位(从最低薪水到第 5 位的最低薪水)受薪员工?

SELECT EMPID,NAME,DEPTID,SALARY
FROM
(
SELECT EMPID,NAME,DEPTID,SALARY, DENSE_RANK() OVER (ORDER BY SALARY) AS RN
FROM Table1
) 
WHERE RN=5

b) 查询各部门收入最高的员工

SELECT EMPID,NAME,DEPTID,SALARY
FROM
(
SELECT EMPID,NAME,DEPTID,SALARY, 
  DENSE_RANK() OVER (PARTITION BY DEPTID ORDER BY SALARY DESC) AS RN
FROM Table1
)
WHERE RN=1

演示

http://sqlfiddle.com/#!4/63ce0/12

【讨论】:

    【解决方案2】:

    假设我们有一个名为 EmployeeSalary 的表,它有 3 列:

    1. 身份证
    2. 姓名
    3. 工资

    根据下表数据,多名员工的工资可能相同

    Id  Name    Salary
    ----------
    6   Belalo  74
    1   Karim   100
    5   dIPU    100
    4   Satter  102
    9   Kiron   120
    10  Rash    120
    11  Harun   130
    13  Baki    130
    12  Munshi  132
    2   Rahim   500
    7   Kaif    987
    8   Sony    987
    3   Belal   4000
    

    现在查询将是

    SELECT A.Salary
    FROM
    (
    SELECT DISTINCT Salary, 
    DENSE_RANK() OVER (ORDER BY Salary) AS Ranks
    FROM [dbo].[EmployeeSalary]
    ) A 
    WHERE A.Ranks=5
    

    【讨论】:

    • 这是无效的(标准)SQL,不能在 Oracle 上运行
    • 在 SQL server 中对我来说工作正常
    • 问题是关于 Oracle,而不是 SQL Server
    猜你喜欢
    • 2021-01-25
    • 1970-01-01
    • 1970-01-01
    • 2019-11-02
    • 1970-01-01
    • 2020-02-14
    • 1970-01-01
    • 1970-01-01
    • 2010-09-26
    相关资源
    最近更新 更多