MySQL如何将同ID下带Null值的多行合并为包含所有有效值的单行
MySQL同分组多行合并为单行方案
实现思路
按ID、Name字段分组后,使用聚合函数忽略NULL值的特性提取每个Type字段的有效值即可,MAX()、MIN()都可以实现该效果。
示例查询语句
假设你的表名为test_table,语句如下:
SELECT ID, Name, MAX(Type1) AS Type1, MAX(Type2) AS Type2, MAX(Type3) AS Type3, MAX(Type4) AS Type4 FROM test_table -- 仅查询ID=1、Name=ABC的分组时保留下方WHERE条件,查询全部分组则删除 WHERE ID = 1 AND Name = 'ABC' GROUP BY ID, Name;
原理解释
GROUP BY ID, Name会将所有ID、Name完全相同的行归为同一个分组- 聚合函数
MAX()计算时会自动跳过NULL值,你的场景中每个Type字段在分组内仅有一个非空值,会被MAX()直接提取出来 - 如果你的Type字段是字符串类型,
MAX()会取字典序最大的有效值,因为分组内只有一个非空值,返回结果完全符合预期
内容的提问来源于stack exchange,提问作者Fran Aguero
相关产品推荐
相关产品推荐

