You need to enable JavaScript to run this app. SQL如何按分组合并含空值的相同行并聚合各列非空值
优惠活动
大模型
产品
解决方案
定价
更多

SQL如何按分组合并含空值的相同行并聚合各列非空值

按分组键合并同组非空值的SQL实现

核心实现逻辑

利用聚合函数自动忽略NULL值的特性,以col1为分组键对每一列做聚合,直接提取同组下的非空值,就能完成同组多行到单行的合并。
因为你的业务场景中,同一分组下每一列最多只有1个非空值,用MIN()/MAX()这类基础聚合函数就能直接拿到目标值,写法简单且兼容几乎所有SQL引擎。

注意:不要直接使用COALESCE(col2, col3, col4)类的写法实现需求,这类函数是逐行判断取值,不会跨同组多行提取非空值,必须搭配GROUP BY的聚合逻辑才能完成跨行合并操作。

通用可直接运行的查询代码

SELECT
  col1,
  MIN(col2) AS col2,
  MIN(col3) AS col3,
  MIN(col4) AS col4
FROM 替换为你实际使用的表名
GROUP BY col1;

运行后即可得到目标合并结果:commonrow分组下,col2取到'one'、col3取到'two'、col4取到'three'的单行记录。

扩展适配(同列多非空值场景)

如果后续遇到同一分组下某列存在多个不同非空值,需要把所有值拼接展示的情况,可以根据你使用的数据库替换对应聚合函数:

  • MySQL 5.7及以上:把MIN(colx)替换为 GROUP_CONCAT(DISTINCT colx SEPARATOR ',')
  • PostgreSQL、SQL Server 2017及以上:把MIN(colx)替换为 STRING_AGG(DISTINCT colx, ',')
  • Oracle:把MIN(colx)替换为 LISTAGG(DISTINCT colx, ',') WITHIN GROUP (ORDER BY colx)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.01 04:54:05