ORACLE SQL第二个最高薪水[重复]
Posted
技术标签:
【中文标题】ORACLE SQL第二个最高薪水[重复]【英文标题】:ORACLE SQL Second Maximum Salary [duplicate] 【发布时间】:2017-12-29 06:02:30 【问题描述】:如何从员工表中找到员工提取的第二个最高工资。是否可以通过 ROWNUM 函数找到。
示例表:
S.no Name employee_id salary
201 Steven 100 1000
202 Alexander 101 2500
203 Daniel 102 5000
204 John 103 3000
205 Ishanth 104 8000
【问题讨论】:
是的。您能否提供您试图从中找到第二个最高薪水的示例行? 至少提供表格 【参考方案1】:既然你提到了第二高的薪水,你应该使用DENSE_RANK
而不是ROW_NUMBER
,如果有两个员工的最高值相同,即使你给出WHERE ROW_NUMBER = 2
条件也会错误地给你最高薪水.
SELECT A.S_NO, A.NAME, A.EMPLOYEE_ID, A.SALARY
FROM
(SELECT S_NO, NAME, EMPLOYEE_ID, SALARY,
DENSE_RANK() OVER (ORDER BY SALARY DESC) AS SALARY_RANK) A
WHERE A.SALARY_RANK = 2;
【讨论】:
不知道为什么有人不赞成这个,这是一个非常好的答案。 这令人沮丧! 我要提到的唯一解决方法是添加缺少的FROM
,如AS SALARY_RANK FROM A)
。这为我的实施提供了正确答案。【参考方案2】:
试试这个
SELECT salary FROM (SELECT DISTINCT salary FROM Employees ORDER BY salary
DESC) WHERE ROWNUM=2;
在哪里,
salary
是列名
Employees
是表名
或
获取第二个最高薪水和第n个薪水的最简单方法
select
DISTINCT(salary)
from Employees
order by salary desc
limit 1,1
注意:
limit 0,1 - Top max salary
limit 1,1 - Second max salary
limit 2,1 - Third max salary
limit 3,1 - Fourth max salary
预言机更新
SELECT salary FROM (
SELECT salary, row_number() OVER (order by salary desc) AS rn FROM Employees
)
WHERE rn = 2
【讨论】:
赞成,但 oracle 不支持limit
您正在为这个问题添加 sql 标签。这就是我在 sql 中给出这个答案的原因。请在oracle中找到一种限制方法
@APC 我已经更新了我的答案。
@Rams 我已经更新了我的答案
ROWNUM=2
不像你想象的那样工作;该查询将返回 零 行。【参考方案3】:
使用一般查询获取最大 nth 薪水:
select salary from table_name order by salary desc limit n-1,1;
【讨论】:
【参考方案4】:而不是使用 ROWNUM 。您可以通过
轻松找到第 'n' 个薪水SELECT *
FROM (
SELECT DISTINCT salary
FROM Employees
ORDER BY salary DESC limit 2
) a
ORDER BY a.salary limit 1
在这里,您可以给出所需的任何“n”值,而不是“2”。
【讨论】:
【参考方案5】:我猜,你可以在这里使用 Nth_Value 函数 语法请参考https://docs.oracle.com/cloud/latest/db112/SQLRF/functions114.htm#SQLRF30031
select distinct
nth_value(salary,2) OVER (ORDER BY salary desc range between unbounded preceding and unbounded following) as secondVal
from HR.EMPLOYEES;
另一种选择,如下使用 DENSE_RANK 函数
with cte as (
select salary, dense_rank() over (order by salary desc) as nth_salary from Employee
)
select salary from cte
where
nth_salary = 2;
这是输出
【讨论】:
如果有两个员工的薪水最高会怎样? 假设如果有两个最大值,假设前 2 个薪水与 100 相同,则此查询将返回 100。而不是下一个。以上是关于ORACLE SQL第二个最高薪水[重复]的主要内容,如果未能解决你的问题,请参考以下文章
4不准用组函数(Max),取得最高薪水bjpowernode34道SQL题