You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL查询如何对重复姓名数据去重并保留对应年龄的最大值

解决方案

方案1:基础聚合查询(最常用,仅需获取分组和最大值时优先用)

直接用GROUP BY配合MAX()聚合函数即可实现需求,SQL语句如下:

SELECT name, MAX(age) AS age
FROM 你的表名
GROUP BY name;

逻辑为按name分组,每组内取age的最大值返回,完全匹配你给出的场景要求。

方案2:窗口函数(灵活度最高,需要获取最大值对应行的其他字段时用)

如果除了name和最大age外,还需要获取该行的其他字段数据,可以使用ROW_NUMBER()窗口函数实现:

WITH ranked_data AS (
    SELECT
        name,
        age,
        -- 此处可添加其他需要查询的字段
        ROW_NUMBER() OVER (PARTITION BY name ORDER BY age DESC) AS rank_num
    FROM 你的表名
)
SELECT name, age -- 此处可添加其他需要返回的字段
FROM ranked_data 
WHERE rank_num = 1;

如果同name下有多条相同最大age的记录需要全部保留,将ROW_NUMBER()替换为RANK()即可。

方案3:关联子查询(适配不支持窗口函数的低版本SQL环境)

SELECT t1.name, t1.age
FROM 你的表名 t1
LEFT JOIN 你的表名 t2 
    ON t1.name = t2.name AND t1.age < t2.age
WHERE t2.name IS NULL;

逻辑为找到同name分组下,不存在比当前记录age更大的记录,即为分组内的最大值记录。

内容的提问来源于stack exchange,提问作者stackword_0

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 15:54:08