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

时间:2016-01-13 00:17:05

标签: mysql sql group-by group-concat

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 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:3)

如果有人遇到这个问题,但是需要它在一个非顺序的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

希望有人帮助。