如何对数据分组返回唯一行并按分组规则生成新列Col6
实现方案
核心逻辑说明
直接通过GROUP BY聚合即可实现需求,无需额外中间表:
- 按
Col3、Col4、Col5分组后,统计两个指标:- 组内Col1非空的总行数(COUNT函数统计列时会自动忽略NULL值)
- 组内Col2非空的总行数
- 若两个统计值都大于0,说明组内同时存在Col1、Col2有值的行,符合第一条规则,Col6赋值为1
- 若其中一个统计值为0,说明组内所有行只有同一列有值,符合第二条规则,Col6赋值为2
通用SQL实现(适配MySQL、SQL Server、PostgreSQL等绝大多数数据库)
SELECT Col3, Col4, Col5, CASE WHEN COUNT(Col1) > 0 AND COUNT(Col2) > 0 THEN 1 ELSE 2 END AS Col6 FROM 你的实际表名 GROUP BY Col3, Col4, Col5;
封装为存储过程needed示例(以MySQL为例)
DELIMITER // CREATE PROCEDURE needed() BEGIN SELECT Col3, Col4, Col5, CASE WHEN COUNT(Col1) > 0 AND COUNT(Col2) > 0 THEN 1 ELSE 2 END AS Col6 FROM 你的实际表名 GROUP BY Col3, Col4, Col5; END // DELIMITER ;
调用方式:CALL needed();
结果验证
用你提供的测试数据运行后,返回结果和预期完全一致:
| Col3 | Col4 | Col5 | Col6 |
|---|---|---|---|
| AA1 | AA1 | 0 | 1 |
| BB1 | BB2 | 1 | 2 |
内容的提问来源于stack exchange,提问作者Selena
相关产品推荐
相关产品推荐

