2015-02-24 24 views
0

我有以下数据:COUNT DISTINCT和GROUP BY在同一查询错误

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条款时,它会给我正确的结果。

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

回答

0

GROUP BY的目的是取几行并将它们变成一行。如果这样,它必须知道如何处理具有不同值的所有组合行。这就是为什么你有两种选择你想要的SELECT的每个字段,要么将它包含在GROUP BY子句中,要么将它用在聚合函数中,以便系统知道你想如何组合字段。

您还遇到了GROUP BY条款的严格要求。哪一列不在GROUP BY子句中必须具有应用功能,以将匹配“组”的所有记录缩减为单个记录,如SUMMAX,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

0

在查询时不应使用count()group by相同的column如果你只想计算不同countryId。结果是这样的,因为它将返回的count(DISTINCT countryId)分配给多个row(因为GROUP BY countryId子句),而不是仅返回一个row。代码count(DISTINCT countryId)就足够了。