AND OR SQL运算符具有多个记录

时间:2018-01-10 23:22:46

标签: sql hive

我有以下查询,如果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;

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

问题出在您怀疑的IN部分:两个IN运算符不会以任何方式影响彼此,因此campaign可以是camp1description 1}}是brand2

如果您的DBMS支持IN语句中的多个列,则使用单个IN语句:

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

如果没有,您可能不得不使用ANDOR 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...]