2017-01-12 48 views
0

一些搜索後,我發現,我認爲會解決我的問題如下:如何在group_concat中獲取唯一值?

http://www.w3resource.com/mysql/aggregate-functions-and-grouping/aggregate-functions-and-grouping-group_concat.php

我正在運行的MYSQL

SELECT p.object_id, GROUP_CONCAT(p.user_id) as users 
FROM objects p 
GROUP BY p.user_id 

我想返回尋找這樣的數據如下

object_id | users 

    64904 2181103, 2186761 
    64903 2186757 
    64902 2186755, 2186756 
    64901 2185796 
    64900 2185796 

相反,我的數據與相同的值重複這樣的返回:

object_id | users 

    64904 2181103, 2181103 
    64903 2186757 
    64902 2186755, 2186755 
    64901 2185796 
    64900 2185796 

我的表看起來像這樣:

object_id | user_id 
64904  2181103 
64904  2186761 
64903  2186757 
64902  2186755 
64902  2186756 
64902  2186755 
64902  2186756 
64901  2185796 
64900  2185796 

有人可以幫助我理解我在做什麼錯在這裏?

+3

'GROUP BY p.user_id'應該是'GROUP BY p.object_id'。 –

+0

smh - 它總是在你面前。太感謝了。我已經失去了幾個小時在這個:( – nobles

+0

我們都在那裏,男人。我前幾天掙扎幾個小時,因爲我拼寫「商業」錯誤>。> –

回答

2

大多數,如果不是全部,在MySQL聚合函數可以利用一個DISTINCT修飾符的函數調用中,像這樣:

GROUP_CONCAT(DISTINCT p.user_id) AS users 
COUNT(DISTINCT p.user_id) AS userCount 
etc... 
2

GROUP_CONCAT()帶有一個可選的DISTINCT。另外,正如評論中指出的那樣,你的小組看起來很不錯。

試試這個:

SELECT p.object_id, GROUP_CONCAT(DISTINCT p.user_id) as users 
    FROM objects p 
    GROUP BY p.object_id 
1

MySQL需要知道哪些領域的小組,哪些領域結合在一起。

如果你想要每個對象的用戶列表,那麼你想組object_id

SELECT p.object_id, GROUP_CONCAT(p.user_id) as users 
FROM objects p 
GROUP BY p.object_id