2016-05-04 40 views
1

我想寫一個MySQL查詢來查看哪些郵政編碼出現最頻繁爲我們的客戶,並需要幫助完成它。我的select語句結尾處的office字段可以是每個郵政編碼的1到10個可能性。MySQL查詢每個辦公室的郵政編碼的頻率

我該如何解決這個查詢,讓我獲得最常見的郵政編碼,以及10個可能的辦公室中哪些恰好位於該郵政編碼中?

SELECT SUBSTRING(zip_code, 1, 5) AS zip, 
COUNT(*) AS freq, office 
FROM customer_billing 
WHERE status != 'deleted' 
GROUP BY zip 
ORDER BY freq DESC 

示例輸出什麼,我在尋找:

zip  freq  office 
---- ----  ---- 
92101 450  office_A, office_B 
02124 300  office_A, office_C, office_D 
07713 110  office_B 

回答

1

使用GROUP_CONCAT隨着DISTINCT。使用DISTINCT是必要的,因爲給定的辦公室可能會出現多次給定的郵政編碼。

SELECT SUBSTRING(zip_code, 1, 5), COUNT(*) AS freq, 
    GROUP_CONCAT(DISTINCT office ORDER BY office DESC SEPARATOR ',') 
FROM customer_billing 
WHERE status != 'deleted' 
GROUP BY SUBSTRING(zip_code, 1, 5) 
ORDER BY freq DESC 
+1

完美!謝謝! –

1

您可以使用group_concat

該函數返回從一組連鎖的非NULL 值的字符串結果。如果沒有非NULL值,它將返回NULL。 完整的語法如下:

SELECT SUBSTRING(zip_code, 1, 5) AS zip, 
COUNT(*) AS freq, GROUP_CONCAT(office) 
FROM customer_billing 
WHERE status != 'deleted' 
GROUP BY zip 
ORDER BY freq DESC