这两种方法返回不同的结果怎么可能?
方法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
答案 0 :(得分:2)
删除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
答案 1 :(得分:1)
难怪您会得到两种不同的结果。
第一个查询:
为您提供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
,并且在采用不同的值时,根据您的case语句得出一行
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语句,否则条件为不匹配的条件返回0
答案 2 :(得分:0)
这意味着您有1条记录,其中contact_id为NULL。通常,COUNT()会忽略NULL值。您的第二个查询通过“ ELSE”分支将NULL转换为零。这就是为什么您会看到与众不同的原因。
在此示例中,您可以快速看到自己。尽管有3条记录,这将返回2
select count(distinct a.col1)
from (
select 1 as Col1
union select 2
union select NULL
) a