如何在没有分组依据的情况下 select 具有最大技能属性的 ID

How to select ID with max skill attribute without group by

如何在不按 id 分组的情况下 select id 的最大技能。

我想保持 max(skill) 的记录在

select ID, max(skill) from skill_table group by ID, skill

但是当我按 id 分组时,我会得到所有记录,因为它的唯一键

ID Skill
89fddc8855819055015581a48fdf000c 2
8a12d16c7539f28a01754a884e2801c0 1

我需要用这样的东西来保存技能 2 的 ID

CASE WHEN max(SKILL)THEN ID END 

有什么建议吗?

Skill 降序排列,然后得到第一行(如果可能有很多最大行,则有联系):

SELECT *
FROM   skill_table
ORDER BY skill DESC
FETCH FIRST ROW WITH TIES;

如果您只需要一行,请使用 FETCH FIRST ROW ONLY

如果您使用的不是 Oracle 12c 或更高版本,则使用 RANK 分析函数:

SELECT *
FROM   (
  SELECT s.*,
         RANK() OVER ( ORDER BY skill DESC ) rnk
  FROM   skill_table s
)
WHERE  rnk = 1;

或者,如果您只需要一行(而不是所有最大值),则使用 ROW_NUMBER 而不是 RANK

如果你真的想使用聚合然后使用 KEEP:

SELECT MAX(Skill) AS skill,
       MAX(id) KEEP ( DENSE_RANK LAST ORDER BY Skill ) AS id
FROM   Skill_table

db<>fiddle here