在 Oracle SQL 中使用 "Fetch First" 后如何对行进行排序?
How do I order rows after using "Fetch First" in Oracle SQL?
我有一个 Oracle SQL 查询,它使用 FETCH FIRST
在 PeopleSoft 数据库中查找年薪最高的员工。
SELECT A.EMPLID, A.ANNUAL_RT
FROM PS_EMPLOYEES A
ORDER BY A.ANNUAL_RT DESC
FETCH FIRST ROW WITH TIES;
EMPLID ANNUAL_RT
20218 100000
10300 100000
26992 100000
17864 100000
我想按 EMPLID 对结果进行排序。但是,由于我使用的是 FETCH FIRST 1 ROW WITH TIES
,因此将 EMPLID
添加到我的 ORDER BY
子句会将我的结果限制为 ID 编号最低的 1 名员工。
SELECT A.EMPLID, A.ANNUAL_RT
FROM PS_EMPLOYEES A
ORDER BY A.ANNUAL_RT DESC, A.EMPLID ASC
FETCH FIRST 1 ROW WITH TIES;
EMPLID ANNUAL_RT
10300 100000
如何在不影响 FETCH FIRST
返回的行的情况下 对结果进行排序?
EMPLID ANNUAL_RT
10300 100000
17864 100000
20218 100000
26992 100000
将您的查询作为 table 表达式 括起来(普通的 table 表达式也可以)。这样你就可以post-处理它了。
例如:
select *
from (
SELECT A.EMPLID, A.ANNUAL_RT
FROM PS_EMPLOYEES A
ORDER BY A.ANNUAL_RT DESC
FETCH FIRST 1 ROW WITH TIES
) x
order by emplid;
您可以使用 RANK()
或 DENSE_RANK()
代替 FETCH FIRST
。
SELECT EMPLID, ANNUAL_RT
FROM (
SELECT
A.EMPLID,
A.ANNUAL_RT,
RANK() OVER (ORDER BY A.ANNUAL_RT DESC) AS RANK_NO
FROM PS_EMPLOYEES A
)
WHERE RANK_NO = 1
ORDER BY EMPLID;
结果:
EMPLID ANNUAL_RT
10300 100000
17864 100000
20218 100000
26992 100000
我有一个 Oracle SQL 查询,它使用 FETCH FIRST
在 PeopleSoft 数据库中查找年薪最高的员工。
SELECT A.EMPLID, A.ANNUAL_RT
FROM PS_EMPLOYEES A
ORDER BY A.ANNUAL_RT DESC
FETCH FIRST ROW WITH TIES;
EMPLID ANNUAL_RT
20218 100000
10300 100000
26992 100000
17864 100000
我想按 EMPLID 对结果进行排序。但是,由于我使用的是 FETCH FIRST 1 ROW WITH TIES
,因此将 EMPLID
添加到我的 ORDER BY
子句会将我的结果限制为 ID 编号最低的 1 名员工。
SELECT A.EMPLID, A.ANNUAL_RT
FROM PS_EMPLOYEES A
ORDER BY A.ANNUAL_RT DESC, A.EMPLID ASC
FETCH FIRST 1 ROW WITH TIES;
EMPLID ANNUAL_RT
10300 100000
如何在不影响 FETCH FIRST
返回的行的情况下 对结果进行排序?
EMPLID ANNUAL_RT
10300 100000
17864 100000
20218 100000
26992 100000
将您的查询作为 table 表达式 括起来(普通的 table 表达式也可以)。这样你就可以post-处理它了。
例如:
select *
from (
SELECT A.EMPLID, A.ANNUAL_RT
FROM PS_EMPLOYEES A
ORDER BY A.ANNUAL_RT DESC
FETCH FIRST 1 ROW WITH TIES
) x
order by emplid;
您可以使用 RANK()
或 DENSE_RANK()
代替 FETCH FIRST
。
SELECT EMPLID, ANNUAL_RT
FROM (
SELECT
A.EMPLID,
A.ANNUAL_RT,
RANK() OVER (ORDER BY A.ANNUAL_RT DESC) AS RANK_NO
FROM PS_EMPLOYEES A
)
WHERE RANK_NO = 1
ORDER BY EMPLID;
结果:
EMPLID ANNUAL_RT
10300 100000
17864 100000
20218 100000
26992 100000