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
希望对某人有所帮助。
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
希望对某人有所帮助。