这两种方法怎么可能返回不同的结果?
方法1(返回正确计数(:
SELECT COUNT(DISTINCT contact_id)
FROM Traffic_Action
WHERE action_type IN ('Schedule a Tour', 'Schedule Follow-up', 'Lost')
方法2(返回一个额外计数(:
SELECT COUNT(DISTINCT CASE WHEN action_type IN ('Schedule a Tour', 'Schedule Follow-up', 'Lost') THEN contact_id ELSE 0 END)
FROM Traffic_Action
删除else part
-因为0也算作
SELECT COUNT(DISTINCT CASE WHEN
action_type in ('Schedule a Tour','Schedule Follow-up','Lost') THEN contact_id END)
FROM Traffic_Action
难怪会得到两个不同的结果。
第一个查询:
为您提供不同的记录计数,其中action_type in Schedule a Tour, Schedule Follow-up and Lost
SELECT COUNT(DISTINCT contact_id) FROM Traffic_Action WHERE action_type in
('Schedule a Tour','Schedule Follow-up','Lost')
第二个查询:
在这个查询中,除了Schedule a Tour, Schedule Follow-up and Lost
之外的任何值都被认为是0
,在取不同的值时,根据您的案例语句结果为一行
SELECT COUNT(DISTINCT CASE WHEN action_type in ('Schedule a Tour','Schedule Follow-
up','Lost') THEN contact_id ELSE 0 END) FROM Traffic_Action
简而言之,
在第一个查询中,您只过滤了三个值
在第二个查询中,您没有过滤器,但对三个值的case语句和else条件为不匹配的条件返回0
这意味着您有一条contact_id为NULL的记录。通常,COUNT((会忽略NULL值。您的第二个查询通过";ELSE";树枝这应该就是你看到差异的原因。
在这个例子中,您可以很快看到自己。这将返回2,尽管有3条记录
select count(distinct a.col1)
from (
select 1 as Col1
union select 2
union select NULL
) a