首页 文章

具有GROUP BY的MySql GROUP_CONCAT每组第n行

提问于
浏览
3

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

2 回答

  • 4

    您需要按 id 的功能进行分组 . 像这样的东西:

    select group_concat(id order by id)
    from testt
    group by floor((id - 1) / 2)
    
  • 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
    

    希望能帮助别人 .

相关问题