0

我有一个 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
4

2 回答 2

3

将您的查询作为表表达式括起来(公共表表达式也可以)。这样您就可以对其进行后期处理。

例如:

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;
于 2020-11-24T18:31:31.237 回答
0

您可以使用RANK()orDENSE_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
于 2020-11-25T14:39:07.410 回答