如何在没有分组依据的情况下选择具有最大技能属性的 ID
Posted
技术标签:
【中文标题】如何在没有分组依据的情况下选择具有最大技能属性的 ID【英文标题】:How to select ID with max skill attribute without group by 【发布时间】:2021-07-15 10:41:29 【问题描述】:如何在不按 id 分组的情况下选择具有最高技能的 id。
我想保留max(skill) in的记录
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
有什么建议吗?
【问题讨论】:
SELECT ID FROM Skill_table WHERE rownum 【参考方案1】:按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小提琴here
【讨论】:
Rank 函数正是我想要的。非常感谢以上是关于如何在没有分组依据的情况下选择具有最大技能属性的 ID的主要内容,如果未能解决你的问题,请参考以下文章
MySQL - 在没有 LIMIT 或 JOIN 的情况下选择指定搜索的最大值