【问题标题】:MYSQL Sum: How to excludes all instances either one of two other columns are nullMYSQL Sum:如何排除所有实例,其他两列之一为空
【发布时间】:2022-01-15 22:19:23
【问题描述】:
在 mysql 中,对于每个客户,我试图运行一个计数,排除所有实例,其他两列之一为空。如果没有两个都为 null 的实例,则返回 0。
考虑下表:
按 customer_id 分组,对于 22,它应该返回 9,因为被阻止和未批准的两行的唯一成本都是空总和到 9。对于 11,它应该返回 10,因为所有行都有双空值。对于 33,它应该返回 0,因为不存在阻塞和未批准都为空的实例。
你会如何建议这样做?
【问题讨论】:
标签:
mysql
sql
sum
aggregation
【解决方案1】:
您可以使用条件聚合来做到这一点:
SELECT customer_id,
SUM(CASE WHEN blocked IS NULL AND unapproved IS NULL THEN cost ELSE 0 END) total
FROM tablename
GROUP BY customer_id;
或者:
SELECT customer_id,
SUM(CASE WHEN COALESCE(locked, unapproved) IS NULL THEN cost ELSE 0 END) total
FROM tablename
GROUP BY customer_id;