SQL中如何在sum(CASE)语句中使用OR条件合并两列统计结果
问题原因
你编写的SQL逻辑错误出在OR连接的判断条件不完整:OR后直接写字符串常量'second%'不属于合法的布尔判断表达式,SQL不会自动补全省略的u.data LIKE部分,因此条件无法按照预期匹配两类数据。
正确实现方案
根据你的统计需求(统计匹配两类前缀的总记录数,结果为原两列对应行的和),有两种常用写法:
- 写法1:在CASE语句中写全两个匹配条件,统计不重复的符合条件的记录数(如果单条记录同时匹配两个前缀,只会被计数1次)
sum( CASE WHEN u.data LIKE 'first%' OR u.data LIKE 'second%' THEN 1 ELSE NULL END ) AS total
- 写法2:直接将原来两个分类统计的结果相加(如果单条记录同时匹配两个前缀,会被计数2次,和你原两列直接求和的结果完全一致)
sum(CASE WHEN u.data LIKE 'first%' THEN 1 ELSE 0 END) + sum(CASE WHEN u.data LIKE 'second%' THEN 1 ELSE 0 END) AS total
结合你给出的预期结果示例,两种写法都能输出你要的total列数值,因为
first%和second%前缀互斥,不存在同一条记录同时匹配两个规则的情况。
内容的提问来源于stack exchange,提问作者Cobra
相关产品推荐
相关产品推荐

