我有以下数据:

countryId languageUsed
1          English
1          France
2          English
2          Spanish
3          Italian
1          Russian


当我查询时:

SELECT count(DISTINCT countryId)
FROM languages
GROUP BY countryId


我得到:

count(DISTINCT countryId)
1
1
1


而不只是3。当我删除GROUP BY子句时,它将给我正确的结果。

有人可以解释这种行为的原因是什么。

最佳答案

GROUP BY的目的是占用几行并将其变成一行,如果这样,它必须知道如何处理所有合并行中值不同的行。这就是为什么要为每个要SELECT的字段提供两个选项的原因,这些选项要么包含在GROUP BY子句中,要么在聚合函数中使用它,以便系统知道如何组合字段。

您还遇到了GROUP BY子句的严格要求。属于GROUP BY子句的每一列都必须应用一个函数,以将匹配的“组”的所有记录减少为单个记录,例如SUMMAXMINAVG等。

如果在GROUP BY子句中列出所有选定的列,则实际上是在要求将重复的记录从结果集中排除。这具有与SELECT DISTINCT相同的效果,该效果也从结果集中消除了重复的行。

除非您非常想同时使用它们和获得理想的结果,否则可以使用SUM。见下文:

 SELECT SUM(countryId) FROM
   (
    SELECT COUNT(DISTINCT countryId)countryId
    FROM languages
    GROUP BY countryId
   ) AS A


SEE DEMO HERE

关于mysql - 相同查询错误中的COUNT DISTINCT和GROUP BY,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28686971/

10-11 03:04
查看更多