PostgreSQL:如何将多行同标识数据合并为单行多列
解决方案
可以通过分组聚合实现这个需求,利用PostgreSQL聚合函数忽略NULL值的特性,结合GROUP BY将同一id和name的多行数据合并为单行:
SELECT id, name, MAX(amount1) AS amount1, MAX(amount2) AS amount2, MAX(amount3) AS amount3 FROM your_table_name GROUP BY id, name;
原理说明
GROUP BY id, name:将所有id和name完全相同的行归为一组MAX(amountX):每个分组内的amountX列只有一个非NULL有效值,聚合函数MAX会自动忽略NULL,提取出该列的有效数值- 如果是其他类似场景(比如需要求和、取平均),可替换为对应的聚合函数(如
SUM()、AVG()),但MAX()最适配当前需求
示例验证
假设你的表数据如下:
| id | name | amount1 | amount2 | amount3 |
|---|---|---|---|---|
| 1 | abc | 10 | null | null |
| 1 | abc | null | 5 | null |
| 1 | abc | null | null | 40 |
| 2 | aaa | 90 | null | null |
| 2 | aaa | null | 20 | null |
| 2 | aaa | null | null | 10 |
执行上述SQL后,会得到你期望的结果:
| id | name | amount1 | amount2 | amount3 |
|---|---|---|---|---|
| 1 | abc | 10 | 5 | 40 |
| 2 | aaa | 90 | 20 | 10 |
内容的提问来源于stack exchange,提问作者Mehul
相关产品推荐
相关产品推荐

