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
相关产品推荐
相关产品推荐

