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

MySQL分组查询中如何获取分组内首个指定字段值?

MySQL分组取指定nomb并求和的解决方案

你的场景中,每个llaveord对应两条记录,需要按llaveord分组求和imp,同时获取该组内id最小的记录的nomb值,以下是两种可行方法:

方法1:兼容所有MySQL版本的子查询关联法

先获取每个llaveord对应的最小id,再关联原表拿到对应nomb并完成求和:

SELECT 
    t.llaveord,
    t.nomb,
    SUM(t2.imp) AS sum
FROM 
    your_table t
INNER JOIN (
    SELECT llaveord, MIN(id) AS min_id
    FROM your_table
    GROUP BY llaveord
) t_min ON t.id = t_min.min_id
INNER JOIN your_table t2 ON t.llaveord = t2.llaveord
GROUP BY t.llaveord, t.nomb;

方法2:MySQL 8.0+ 窗口函数法

利用窗口函数标记分组内的行顺序,筛选出每组第一条记录并求和:

WITH ranked_records AS (
    SELECT 
        llaveord,
        nomb,
        imp,
        ROW_NUMBER() OVER (PARTITION BY llaveord ORDER BY id) AS row_num
    FROM your_table
)
SELECT 
    llaveord,
    nomb,
    SUM(imp) OVER (PARTITION BY llaveord) AS sum
FROM ranked_records
WHERE row_num = 1;

关于常规GROUP BY的问题

当你直接用GROUP BY llaveord且未对nomb做聚合处理时,若MySQL关闭了ONLY_FULL_GROUP_BY模式,会随机返回分组内某条记录的nomb值;开启该模式则会直接报错(因为nomb不在分组字段中且无聚合函数)。你得到xxx是因为分组内id更大的记录被随机选中了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 17:20:09