具有多个记录的 AND 或 SQL 运算符



我有以下查询,如果单独使用 brand1/camp1,查询返回正确的值,但如果我指定多个品牌或广告系列,它会返回其他一些数字,我不确定这背后的数学是什么。这也不是两者的总和。

我认为是IN运算符用","指定OR,而不是我要求它做的事情,即考虑AND

select campaign,
sum(case when campaign in ('camp1', 'camp2') and description in ('brand1', 'brand2') then orders else 0 end) as brand_convs
   from data.camp_results   
where campaign in ('camp1', 'camp2') and channel='prog' and type='sbc'
group by campaign
having brand_convs > 0
order by brand_convs desc;

有什么想法吗?

正如您所怀疑的那样,问题出在IN部分:两个IN运算符不会以任何方式相互影响,因此可以在description brand2camp1 campaign

如果 DBMS 在 IN 语句中支持多个列,则可以使用单个 IN 语句:

SELECT campaign, SUM(
    CASE WHEN (campaign, description) IN (
        ('camp1', 'brand1'),
        ('camp2', 'brand2')
    ) THEN orders ELSE 0 END
) [rest of query...]

如果没有,您可能将不得不使用 AND s 和 OR s

SELECT campaign, SUM(
    CASE WHEN
        (campaign='camp1' AND description='brand1')
        OR (campaign='camp2' AND description='brand2')
    THEN orders ELSE 0 END
) [rest of query...]

最新更新