如何按A、B列分组,使用组内C列最大值填充C列空值?
分组填充空值:用同组最大值替换null
没问题,我来帮你搞定这个需求——按A、B列分组,把C列的null值替换成对应分组里C的最大值,同时如果分组里C全是null就保留原样。下面分几种常用的SQL方言给出具体实现:
MySQL 写法
SELECT A, B, COALESCE(C, MAX(C) OVER (PARTITION BY A, B)) AS C FROM your_table;
- 核心逻辑:
MAX(C) OVER (PARTITION BY A, B)会计算每个(A,B)组合分组里C的最大值,COALESCE函数则负责把C的null值替换成这个最大值,非null值保持不变。
PostgreSQL 写法
PostgreSQL支持相同的窗口函数语法,直接用下面的代码就行:
SELECT A, B, COALESCE(C, MAX(C) OVER (PARTITION BY A, B)) AS C FROM your_table;
SQL Server 写法
SQL Server里可以用ISNULL替代COALESCE,效果一样:
SELECT A, B, ISNULL(C, MAX(C) OVER (PARTITION BY A, B)) AS C FROM your_table;
最终效果验证
运行上述代码后,你的数据表会变成你想要的结果:
| A | B | C |
|---|---|---|
| 1 | 2 | 0 |
| 1 | 2 | 0 |
| 2 | 3 | null |
这里特意处理了分组(2,3)的情况:因为这个分组里C只有null,MAX(C)的结果也是null,所以COALESCE/ISNULL会保留原null值,完全符合你的预期。
内容的提问来源于stack exchange,提问作者Sara
相关产品推荐
相关产品推荐

