You need to enable JavaScript to run this app. 如何使用MySQL语句实现表的分组合并查询
优惠活动
大模型
产品
解决方案
定价
更多

如何使用MySQL语句实现表的分组合并查询

MySQL 同分组非空字段合并实现方法

针对需求中「按col1分组、每个分组最多2行、将同组非空字段合并为单行」的规则,可直接通过聚合函数实现,无需复杂关联:

实现原理

MySQL 的聚合函数(MAX/MIN)会自动跳过字段值为NULL的记录,同分组下如果某个字段仅存在1个非空值,聚合后会直接返回该值,完全匹配合并需求,且查询性能最优。

可直接执行的SQL

结构化结果查询

返回合并后的标准表结构结果,替换为实际表名即可运行:

SELECT
  col1,
  MAX(col2) AS col2,
  MAX(col3) AS col3
FROM 你的表名
GROUP BY col1;

执行后输出结果:

col1col2col3
BC
ADE

带行号的格式化文本输出

如果需要匹配示例中line N: 内容的纯文本格式,根据MySQL版本选择对应语句:

MySQL 8.0+ 版本

SELECT
  CONCAT(
    'line ', ROW_NUMBER() OVER (ORDER BY group_first_id),
    ': ', col1,
    IF(col2 IS NULL, '         ', CONCAT('  ', col2, '   ')),
    IF(col3 IS NULL, '    ', col3)
  ) AS output_line
FROM (
  SELECT
    col1,
    MIN(id) AS group_first_id, -- 按分组首次出现的行排序,保证输出顺序与原始表一致
    MAX(col2) AS col2,
    MAX(col3) AS col3
  FROM 你的表名
  GROUP BY col1
) t;

MySQL 5.x 版本

SELECT
  CONCAT(
    'line ', @rn := @rn + 1,
    ': ', col1,
    IF(col2 IS NULL, '         ', CONCAT('  ', col2, '   ')),
    IF(col3 IS NULL, '    ', col3)
  ) AS output_line
FROM (
  SELECT
    col1,
    MAX(col2) AS col2,
    MAX(col3) AS col3
  FROM 你的表名
  GROUP BY col1
  ORDER BY MIN(id)
) t, (SELECT @rn := 0) init;

扩展适配

如果后续同分组同字段可能出现多个非空值,只需将MAX(col字段)替换为GROUP_CONCAT(col字段 SEPARATOR '')即可适配多值拼接场景,整体查询逻辑无需调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.31 23:45:06