【问题标题】:How to group by a field and return list of other field?如何按字段分组并返回其他字段的列表?
【发布时间】:2012-07-01 23:29:55
【问题描述】:

我有一个列 id, user 的表 我想按列 id 分组并显示每个 id 的用户列表(逗号分隔)。

在我需要显示的最终输出中:

user joe - id 1
users jim, mark, john - id 2
user dave - id 3
....

如果我尝试这个,我会收到错误“违反基数:1242 子查询返回超过 1 行”:

SELECT id, (SELECT distinct(user) FROM mytable b where a.id = b.id)
FROM mytable a
GROUP BY id

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    您正在寻找的是 GROUP_CONCAT 聚合函数:

    SELECT id, GROUP_CONCAT(user) FROM table GROUP BY id
    

    【讨论】:

      【解决方案2】:

      由于您使用的是 MySQL,因此有一个内置函数,即 GROUP_CONCAT 函数。例如,您有这样的记录:

      ID      User
      1       Joe
      2       Jim
      2       Mark
      2       John
      3       Dave
      

      如果您尝试运行此查询:

      SELECT ID, GROUP_CONCAT(User) Users
      FROM tableName
      GROUP BY ID
      

      你会得到这样的结果:

      ID         Users
      1          Joe
      2          Jim, Mark, John
      3          Dave
      

      【讨论】:

      • 完美!谢谢。以前用过那个,就是想不起来了。我在 group_concat() 中添加了 distinct() 以仅获取唯一记录!
      • 我选择了你的作为正确答案,duskwuff 打败你也吃,因为他的答案更短(meta.stackexchange.com/questions/9731/…)我相信你开始得更快,这些例子对其他人有帮助。干杯
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-09-15
      • 1970-01-01
      • 2021-06-12
      • 1970-01-01
      • 2019-11-08
      • 2020-09-29
      • 2021-07-22
      相关资源
      最近更新 更多