如何在SELECT中结合SUM、WHERE子句与GROUP BY实现条件求和?
实现条件分组求和并返回NULL值的SQL方案
你可以通过以下两种常见方式实现需求:
通用SQL写法(适用于所有主流数据库)
使用CASE WHEN语句在求和时进行条件判断,当不满足类型条件时返回NULL,SUM函数会自动忽略NULL值,若分组内无对应类型的数据,最终求和结果即为NULL:
SELECT category, subcategory, SUM(CASE WHEN type = 'A' THEN value ELSE NULL END) AS sumA, SUM(CASE WHEN type = 'B' THEN value ELSE NULL END) AS sumB FROM table GROUP BY category, subcategory
简洁写法(部分数据库支持,如PostgreSQL)
部分数据库支持FILTER子句直接对聚合函数添加过滤条件,语法更直观,无匹配数据时同样返回NULL:
SELECT category, subcategory, SUM(value) FILTER (WHERE type = 'A') AS sumA, SUM(value) FILTER (WHERE type = 'B') AS sumB FROM table GROUP BY category, subcategory
这两种写法都会输出你期望的结果:仅包含A类型数据的分组,sumB列显示NULL;同时包含A、B类型数据的分组,两列均返回对应求和值。
内容的提问来源于stack exchange,提问作者scottdun5
相关产品推荐
相关产品推荐

