按类别汇总col_a,仅当col_b值全同时保留否则返回null的方法
解决方案
可以通过分组后结合聚合函数判断组内col_b是否全部相同,以下是几种通用的实现方式:
方法1:通过MIN/MAX比较判断
这种方法无需计算去重值数量,性能更优,且支持绝大多数SQL数据库:
SELECT category, SUM(col_a) AS sum_a, CASE WHEN MIN(col_b) = MAX(col_b) THEN MIN(col_b) ELSE NULL END AS same_or_none_b FROM your_table GROUP BY category;
方法2:通过COUNT(DISTINCT)判断
如果数据库支持COUNT(DISTINCT)语法,也可以用这种方式:
SELECT category, SUM(col_a) AS sum_a, CASE WHEN COUNT(DISTINCT col_b) = 1 THEN MAX(col_b) ELSE NULL END AS same_or_none_b FROM your_table GROUP BY category;
逻辑说明
SUM(col_a)直接完成分组求和需求;- 对于
same_or_none_b:- 方法1中,若组内所有
col_b值相同,那么它的最小值和最大值必然相等,此时返回该值;否则返回NULL; - 方法2中,通过统计组内
col_b的去重值数量,若数量为1则说明所有值相同,返回该值,否则返回NULL。
- 方法1中,若组内所有
测试你的示例数据后,两种方法都会得到你期望的结果:
category | sum_a | same_or_none_b ---------+-------+--------------- cat_1 | 2.0 | null cat_2 | 3.0 | Z
内容的提问来源于stack exchange,提问作者user3557405
相关产品推荐
相关产品推荐

