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

如何使用MAX聚合函数查询按NAME1分组下年龄最大的全量数据

假设你的表名为people,可以用以下两种常见方案实现需求:


方法1:窗口函数法(兼容MySQL 8.0+/PostgreSQL/SQL Server/Oracle等所有主流新版数据库)

这是目前最简洁高效的写法,用ROW_NUMBER()窗口函数按NAME1分组后按AGE倒序排序,取每组排序第一的记录即可:

SELECT NAME1, NAME2, AGE
FROM (
    SELECT 
        *,
        ROW_NUMBER() OVER (PARTITION BY NAME1 ORDER BY AGE DESC) AS rn
    FROM people
) t
WHERE rn = 1;

注意:如果同个NAME1下存在多条年龄相同的最大值记录,你想要全部取出的话,把ROW_NUMBER()换成RANK()即可。


方法2:子查询关联法(兼容MySQL 5.x等旧版数据库)

如果你的数据库不支持窗口函数,可以先分组查询每个NAME1的最大年龄,再关联原表取完整记录:

SELECT p.NAME1, p.NAME2, p.AGE
FROM people p
INNER JOIN (
    SELECT NAME1, MAX(AGE) AS max_age
    FROM people
    GROUP BY NAME1
) t ON p.NAME1 = t.NAME1 AND p.AGE = t.max_age;

这个写法如果同个NAME1下有多个相同最大年龄的记录,会全部返回,符合需求可直接使用。


两种写法的运行结果均和你预期一致:

NAME1NAME2AGE
LarsThomsen57
PerOlsen58

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 16:06:07