2015-02-24 34 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)就足夠了。