如何在没有分组依据的情况下 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
如何在不按 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