gpt4 book ai didi

mysql - func.count(distinct(...)) 不会给出与 distinct().count() 相同的结果

转载 作者:行者123 更新时间:2023-11-29 01:59:33 29 4
gpt4 key购买 nike

我有一列包含空条目,例如此列中的可能值为 None, 1, 2, 3

当我使用 session.query(func.count(distinct(Entry.col))).scalar() 计算列中唯一条目的数量时,我返回“3”。

但是当我使用 session.query(Entry.col).distinct().count() 执行计数时,我返回“4”。

为什么后一种方法计算None,而第一种方法不计算?

最佳答案

在第一种情况下,结果查询将如下所示:

SELECT COUNT(DISTINCT(col)) FROM Entry

...而且,您可能已经知道,此处的 COUNT 实际上不会计算 NULL 值。

然而,在第二种情况下,查询不同,如 the doc 所示。 :

SELECT count(1) AS count_1 FROM (
SELECT DISTINCT(col) FROM Entry
) AS anon_1

现在只计算 SELECT DISTINCT 查询返回的总行数(即 4 - NULL 包含在 DISTINCT 查询的输出中)。 p>

原因很简单:query.count 的目的是返回查询在没有 count 子句的情况下将返回的行数。此方法无法让您控制应该使用哪些列来计数 - 这就是 func.count(...) 的用途。

关于mysql - func.count(distinct(...)) 不会给出与 distinct().count() 相同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18822263/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com