2017-08-11 84 views
0

我正在參加一門關於MySQL的coursera在線課程。在其中一個練習中,我必須MySQL:分組條款

「編寫一個查詢,輸出美國州和郵政編碼(郵政編碼)的每個組合中唯一User_Guids的總數,首先按狀態名稱按字母升序排序順序,第二通過降序排列獨特User_Guids」

總數所以我寫了這樣的代碼:

SELECT state, zip, COUNT(DISTINCT user_guid) AS NUM_Users 
FROM users 
WHERE Country="US" 
GROUP BY zip 
ORDER BY State ASC, NUM_Users DESC; 

,並在我的回答得到5027行

正確的代碼是一個明顯的例外是相同的:

GROUP BY State, zip 

它得到5043行。

我很困惑。爲什麼我的代碼不工作並給出正確答案?

謝謝!

+1

group by state。你選擇國家,但由國家 –

+4

組,因爲有郵政編碼,可在多個國家? – Jens

+2

第一個GROUP BY無效,將在舊版本的MySQL中返回不可預知的結果,將在新版本中引發錯誤(除非在兼容模式下)。一般的GROUP BY規則表示:如果指定了GROUP BY子句,則每個列引用在SELECT列表中必須標識分組列或者是設置函數的參數! – jarlh

回答

0

正如Jens提到的,事實證明,有多個條目與狀態,但空郵政編碼。當我不按狀態分組時,所有這些NULL郵政編碼都會被合併爲一個。

按狀態和ZIP進行分組,允許這些NULL郵政編碼在其各自狀態下保留在輸出中。