gpt4 book ai didi

sql - ORACLE sql查询获取前3名工资rownum大于

转载 作者:行者123 更新时间:2023-12-04 20:04:34 25 4
gpt4 key购买 nike

我想编写一个查询来显示获得前 3 名薪水的员工

  SELECT *
FROM (SELECT salary, first_name
FROM employees
ORDER BY salary desc)
WHERE rownum <= 3;

但我不明白如何为嵌套查询计算此 rownum这行得通吗?如果有问题,请您让我理解:

SELECT *
FROM (SELECT salary, first_name
FROM employees
ORDER BY salary )
WHERE rownum >= 3;

我浏览了这个链接 Oracle/SQL: Why does query "SELECT * FROM records WHERE rownum >= 5 AND rownum <= 10" - return zero rows ,但它再次指向一个链接,该链接没有给出答案

最佳答案

a_horse_with_no_name 的回答很好,
但只是为了让您了解为什么您的第一个查询有效而您的第二个查询无效:

当您使用子查询时,Oracle 不会神奇地使用 子查询 的 rownum,它只是获取排序的数据,因此它会相应地给出 rownum,第一个匹配条件的行仍然获得 rownum 1,依此类推。这就是为什么您的第二个查询仍然不返回任何行的原因。

如果要限制起始行,需要保留子查询的rownum,即:

SELECT *
FROM (SELECT * , rownum rn
FROM (SELECT salary, first_name
FROM employees
ORDER BY salary ) )sq
WHERE sq.rn >= 3;

但正如 a_horse_with_no_name 所说,还有更好的选择......

编辑:为了让事情更清楚,看看这个查询:

with t as (
select 'a' aa, 4 sal from dual
union all
select 'b' aa, 1 sal from dual
union all
select 'c' aa, 5 sal from dual
union all
select 'd' aa, 3 sal from dual
union all
select 'e' aa, 2 sal from dual
order by aa
)
select sub.*, rownum main_rn
from (select t.*, rownum sub_rn from t order by sal) sub
where rownum < 4

注意sub rownum和main rownum的区别,看哪个用于criteria

关于sql - ORACLE sql查询获取前3名工资rownum大于,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10159495/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com