MySql GROUP_CONCAT 对每组第 n 行进行 GROUP BY

MySql GROUP_CONCAT with GROUP BY every set of nth rows

SQL fiddle: http://sqlfiddle.com/#!9/e7f72/2

假设一个名为 testt 的 table 中有 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

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

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

万一有人 运行 解决这个问题,但需要它在一个非连续的 id 列上工作,这里是解决方案。

在下面的查询中,test 是带有非顺序 id 列的 table 名称。如果您已经选择了数据库,则 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);

如果您的 table 看起来像这样:

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

希望对某人有所帮助。