0
我已經有了一個基本查詢來從我的數據庫中選擇所有位置,然後按它們的郵編的前2個字符對它們進行分組。使用另一個GROUP BY過濾GROUP BY結果以進行修剪
SELECT LEFT(`locationPostcode`, 2) as `postcode`, count(`locationPostcode`) as `locationCount`
FROM `locations`
WHERE `locationPostcode` IS NOT NULL
AND `locationPostcode` <> ''
GROUP BY `postcode`
ORDER BY `locationCount` DESC
因爲有些郵政編碼僅1個字母字符,而不是2開始,我需要這組再次獲得這些郵政編碼(例如E1,W2),只顯示他們的第一個字母。
我在此嘗試將它們分組再次LEFT('postcode', 2)
,但它似乎並沒有產生太大的影響(下查詢)
SELECT postcode, locationCount FROM (
SELECT LEFT(`locationPostcode`, 2) as `postcode`, count(`locationPostcode`) as `locationCount`
FROM `locations`
WHERE `locationPostcode` IS NOT NULL
AND `locationPostcode` <> ''
GROUP BY `postcode`
ORDER BY `locationCount` DESC
) as `outer`
GROUP BY left(`postcode`, 1)
ORDER BY `locationCount` DESC
澄清:我想我的實際郵編結果如下:
postcode | count
----------------
E | 3000
W | 2200
SW | 1300
不是:
postcode | count
----------------
SW | 1300
E1 | 1000
E2 | 300
S1 | 200
S2 | 100
S3 | 50
一般GROUP BY規則說:如果指定了GROUP BY子句,在SELECT列表中的每個列引用必須明確指出的一個分組列或成爲集合函數的參數。 – jarlh
樣本數據和期望的結果將有所幫助。根據你所描述的,你不能在第一個查詢中用「1」代替「2」嗎? –
這些似乎是英國郵政編碼,在這種情況下,您可以將數字1到9作爲第二個字符 – Shadow