You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CASE WHEN中AND/OR逻辑导致统计结果异常的问题排查

问题根源与修复方法

核心错误:逻辑运算符优先级偏离需求

SQL中AND的优先级高于OR,你的CASE WHEN条件被数据库自动解析为:

n.country != o.country 
OR (n.user_tag != o.user_tag AND n.email_address = o.email_address)

这和你真实需求的**「n.email_address = o.email_address 且 (n.country != o.country 或 n.user_tag != o.user_tag)」**完全不符。

矛盾结果的原因

你单独查询country不等且email相等或user_tag不等且email相等时结果为0,说明不存在这两类数据。但合并查询得到10条,是因为原逻辑把**「country不等但email不等」**的记录错误统计进去了——这部分数据满足n.country != o.country,触发了OR的前半部分条件,被误计入统计。

修复后的SQL代码

用括号强制改变运算顺序,先验证email相等,再判断country或user_tag的不等条件:

COUNT(DISTINCT CASE WHEN 
    n.email_address = o.email_address
    AND (n.country != o.country OR n.user_tag != o.user_tag)
    THEN n.email_address
    END) AS OTHER_CHANGES_IN_DATA
FROM OLD o
INNER JOIN NEW n 
    ON n.user_id = o.user_id

验证建议

可以单独统计country不等但email不等的记录数,确认是否正好是10条:

COUNT(DISTINCT CASE WHEN 
    n.country != o.country 
    AND n.email_address != o.email_address
    THEN n.email_address
    END) AS COUNTRY_CHANGE_NO_EMAIL_MATCH
FROM OLD o
INNER JOIN NEW n 
    ON n.user_id = o.user_id

内容的提问来源于stack exchange,提问作者hamesjendo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 22:12:03