【问题标题】:MySql GROUP_CONCAT with GROUP BY every set of nth rowsMySql GROUP_CONCAT 与 GROUP BY 每组第 n 行
【发布时间】:2016-01-13 00:17:05
【问题描述】:

SQL 小提琴:http://sqlfiddle.com/#!9/e7f72/2

假设一个名为 testt 的表中有 10 条记录(id 不是 null 自动递增)。如果我这样做

SELECT GROUP_CONCAT(id) FROM testt

我希望结果看起来像

1,2,3,4,5,6,7,8,9,10

我怎样才能让结果看起来像这样:

1,2

3,4

5,6

7,8

9,10

【问题讨论】:

    标签: mysql sql group-by group-concat


    【解决方案1】:

    您需要按id 的函数进行分组。像这样的:

    select group_concat(id order by id)
    from testt
    group by floor((id - 1) / 2)
    

    【讨论】:

    • 这正是我需要的,谢谢!让我在 9 分钟内接受它作为答案。想添加解释吗?
    • 我将它应用到我的一些活动表中,并且我意识到这个解决方案只有在您的 Id 列中没有间隙的情况下才有效。如果您的 id 为 1-5 然后 15-30,则它无法正常工作。当我找到解决方案时,我会用答案编辑我的问题。
    • @user2278120 。 . .你应该问另一个问题,明确提到差距(甚至引用这个问题)。
    • @Gordon Linoff 我已经想通了。你确定我应该创建一个我已经知道答案的问题吗?
    • @user2278120 。 . .我的意思不是在评论中提出问题,而是作为一个问题(这是一个灰色区域......小问题适合 cmets)。
    【解决方案2】:

    如果有人遇到这个问题,但需要它在不连续的 id 列上工作,这里是解决方案。

    在下面的查询中,test 是具有非连续 id 列的表名。如果您已经选择了数据库,则 Dbname 是可选的。

    SELECT  
       GROUP_CONCAT(id ORDER BY id ASC) AS "ids" 
    FROM  
    (  
        SELECT  
        @row := @row +1 AS rownum, id
        FROM  
        (  
        SELECT @row :=0 
        ) r, Dbname.test 
    ) ranked  
    GROUP BY 
        FLOOR((rownum - 1) / 2);
    

    如果你有一个如下所示的表:

    id
    1
    2
    3
    4
    10
    15
    17
    18
    20
    21
    23
    25
    32
    55
    105
    1011
    1012
    1013
    1014
    1111
    1112
    1113
    1114
    1115
    1116
    1117
    1118
    1119
    2001
    2002
    2003
    

    上面的查询会给出这样的结果:

    ids
    1,2
    3,4
    10,15
    17,18
    20,21
    23,25
    32,55
    105,1011
    1012,1013
    1014,1111
    1112,1113
    1114,1115
    1116,1117
    1118,1119
    2001,2002
    2003
    

    最后,如果你改变了这一行

    FLOOR((rownum - 1) / 2);
    

     FLOOR((rownum - 1) / 3);
    

    结果是这样的:

    ids
    1,2,3
    4,10,15
    17,18,20
    21,23,25
    32,55,105
    1011,1012,1013
    1014,1111,1112
    1113,1114,1115
    1116,1117,1118
    1119,2001,2002
    2003
    

    希望对某人有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-06-16
      • 1970-01-01
      • 1970-01-01
      • 2021-07-11
      • 2010-12-04
      • 2023-03-21
      相关资源
      最近更新 更多