如何基于非互斥条件对数据表指定列执行求和统计
问题原因
你使用的CASE WHEN是互斥判断逻辑:当某行TextColumn同时包含a和b(比如示例中的ab记录),只会命中第一个LIKE '%a%'的条件,仅被归为a组,不会计入b组统计,和你要求的非互斥统计规则不符,因此结果错误。
解决方法
方法1:UNION ALL 分别统计(兼容所有SQL版本)
分别统计两个分组的求和结果再合并,写法通用无数据库依赖:
SELECT 'a' AS TextGroup, SUM(ValueColumn) AS GroupSum FROM <Table> WHERE TextColumn LIKE '%a%' UNION ALL SELECT 'b' AS TextGroup, SUM(ValueColumn) AS GroupSum FROM <Table> WHERE TextColumn LIKE '%b%'
方法2:行展开后统计(支持LATERAL/UNNEST的数据库可用)
如果后续要新增统计分组,不想重复写UNION语句,可以用规则匹配的方式实现:
-- 以PostgreSQL语法为例 SELECT t.group_name AS TextGroup, SUM(v.ValueColumn) AS GroupSum FROM <Table> v JOIN (VALUES ('a', '%a%'), ('b', '%b%')) AS t(group_name, match_pattern) ON v.TextColumn LIKE t.match_pattern GROUP BY t.group_name
两种写法返回的结果都和你的预期一致。
内容的提问来源于stack exchange,提问作者jpkey
相关产品推荐
相关产品推荐

