COUNT(DISTINCT) 和 COUNT(*) + GROUP BY 给出不同的结果

Posted

技术标签:

【中文标题】COUNT(DISTINCT) 和 COUNT(*) + GROUP BY 给出不同的结果【英文标题】:COUNT(DISTINCT) and COUNT(*) + GROUP BY give different results 【发布时间】:2016-03-09 15:57:18 【问题描述】:

我们正在查询其中一个数据集以获取唯一 ID

SELECT count(distinct id) FROM [MyTable] LIMIT 1

另一个查询运行了类似的命令

SELECT count(*) From  ( select id FROM MyTable group by id) A ; 

第一个命令效率更高,但输出应该相同。然而,他们得到了不同的结果。第一个查询返回的结果多出大约 1.5% 的数据集,超过 1 亿行。

【问题讨论】:

【参考方案1】:

COUNT(DISTINCT field) 只是一个估计值。如果您需要准确的结果,您可以使用EXACT_COUNT_DISTINCT(field)

这在查询参考中有解释:https://cloud.google.com/bigquery/query-reference?hl=en#countdistinct

【讨论】:

【参考方案2】:

查看COUNT([DISTINCT] field [, n])定义

It is a statistical approximation and is not guaranteed to be exact.

第二个查询返回精确计数,因此差异

【讨论】:

以上是关于COUNT(DISTINCT) 和 COUNT(*) + GROUP BY 给出不同的结果的主要内容,如果未能解决你的问题,请参考以下文章

countDistinct 和 distinct.count 的区别

为啥 COUNT(DISTINCT (*)) 不起作用?

SQL COUNT DISTINCT 函数

Laravel Eloquent - distinct() 和 count() 不能一起正常工作

Access 2007:“SELECT COUNT(DISTINCT ......”)

spark 例子count(distinct 字段)