我有以下数据:
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
子句的每一列都必须应用一个函数,以将匹配的“组”的所有记录减少为单个记录,例如SUM
,MAX
,MIN
,AVG
等。
如果在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/