2011-08-18 113 views
1

這可能嗎?MySQL:具有ORDER BY COUNT的GROUP_CONCAT?

比方說,我有一個地址列表,有很多重複的條目。我需要過濾掉所有重複項,因爲有些地址名稱略有不同,但郵政編碼和電話號碼相同。

首先我對郵政編碼和電話進行GROUP BY。

SELECT name, address, postalcode, place, phone 
FROM addresses 
GROUP BY postalcode, phone 

但後來我得到隨機名。我想獲得最好的名稱,即每個郵政編碼/電話條目最多的名稱。

所以我想到了以下幾點。這裏我用的SUBSTRING_INDEX功能只獲取在GROUP_CONCAT的第一項(也有在它的字符串「~~」沒有名字):

SELECT SUBSTRING_INDEX(
     GROUP_CONCAT(DISTINCT name ORDER BY COUNT(name) DESC SEPARATOR '~~') 
     , '~~', 1), 
     address, 
     postalcode, 
     place, 
     phone 
FROM addresses 
GROUP BY postalcode, telephone 

,但我得到一個「無效使用組功能」。

如何通過名稱出現的次數來獲得GROUP_CONCAT命令?

+0

「地址」和「地點」會發生什麼?它們可能有不同的值,可能與返回的名稱無關。 –

+0

那麼,我使用郵政編碼表檢查郵政編碼的地址/地點,所以它基本上是我需要過濾的名稱。 (在荷蘭,我們對每條街道都有不同的郵政編碼) – Dylan

回答

0

找到了解決自己,與子查詢:

SELECT 
    SUBSTRING_INDEX(
    GROUP_CONCAT(DISTINCT name ORDER BY CountName DESC SEPARATOR '||') 
    , '||', 1), 
    address, 
    postalcode, 
    place, 
    phone 
FROM (

    SELECT name, address, postalcode, place, phone , COUNT(name) AS CountName 
    FROM addresses 
    GROUP BY name, postalcode, phone 
    ORDER BY COUNT(name) DESC 

) as a 
GROUP BY postalcode, phone 

不知是否可以在沒有子查詢來完成。

+0

對我而言,這將是一個單一的查詢。你有一個子選擇,但它似乎仍然是一個查詢。 – stefgosselin