我有以下查询,如果单独使用 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
brand2
时camp1
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...]