SQL Count Distinct返回一个额外计数



这两种方法怎么可能返回不同的结果?

方法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

最新更新