Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Count Distinct返回一个额外计数_Sql - Fatal编程技术网

SQL Count Distinct返回一个额外计数

SQL Count Distinct返回一个额外计数,sql,Sql,这两种方法返回不同结果的可能性是什么 方法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 F

这两种方法返回不同结果的可能性是什么

方法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部分-因为0也被计算在内

SELECT COUNT(DISTINCT CASE WHEN 
    action_type in ('Schedule a Tour','Schedule Follow-up','Lost') THEN contact_id END) 
FROM Traffic_Action
删除else部分-因为0也被计算在内

SELECT COUNT(DISTINCT CASE WHEN 
    action_type in ('Schedule a Tour','Schedule Follow-up','Lost') THEN contact_id END) 
FROM Traffic_Action

难怪你会得到两个不同的结果

第一个问题:

为您提供操作\在计划巡更、计划跟进和丢失中键入的记录的不同计数

第二个问题:

在该查询中,除Schedule a Tour、Schedule Follow up和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,难怪您会得到两个不同的结果

第一个问题:

为您提供操作\在计划巡更、计划跟进和丢失中键入的记录的不同计数

第二个问题:

在该查询中,除Schedule a Tour、Schedule Follow up和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,这意味着您有一条联系人id为NULL的记录。通常,COUNT忽略空值。第二个查询通过ELSE分支将NULL转换为零。这就是为什么你会看到不同

在本例中,您可以很快看到自己的情况。这将返回2,尽管有3条记录

select count(distinct a.col1)
from (
    select 1 as Col1
    union select 2
    union select NULL
) a

这意味着您有一条联系人id为空的记录。通常,COUNT忽略空值。第二个查询通过ELSE分支将NULL转换为零。这就是为什么你会看到不同

在本例中,您可以很快看到自己的情况。这将返回2,尽管有3条记录

select count(distinct a.col1)
from (
    select 1 as Col1
    union select 2
    union select NULL
) a

在标准SQL中,您还可以在操作输入的位置编写countdistinct contact\u id筛选器…在标准SQL中,您还可以在操作输入的位置编写countdistinct contact\u id筛选器…感谢您的解释!谢谢你的解释!