我有以下查询,如果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;
有什么想法吗?
答案 0 :(得分:0)
问题出在您怀疑的IN
部分:两个IN
运算符不会以任何方式影响彼此,因此campaign
可以是camp1
而description
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...]
如果没有,您可能不得不使用AND
和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...]