如何在group_concat中获取唯一值?

时间:2017-01-12 19:15:35

标签: mysql

经过一些搜索,我发现以下内容我认为可以解决我的问题: 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 个答案:

答案 0 :(得分:2)

MySQL中的大多数(如果不是全部)聚合函数都可以利用函数调用中的DISTINCT修饰符,如下所示:

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

答案 1 :(得分:2)

GROUP_CONCAT()选择DISTINCT。此外,正如评论中所述,您的小组通过视线关闭。

试试这个:

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

答案 2 :(得分:1)

MySQL需要知道要分组的字段,要组合在一起的字段。

如果您想要每个对象的用户列表,那么您希望对object_id进行分组。

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