目录
1.正常操作:
table1表结构及数据如下:
id | date | time | column1 |
1 | 2021-04-01 | 00:00 | 100 |
2 | 2021-04-01 | 1:00 | 200 |
3 | 2021-04-01 | 2:00 | 300 |
4 | 2021-04-01 | 3:00 | 400 |
现在通过date分组,将各个time时段的column1值用逗号作为分隔符,拼接成一个字符串,最后用中括号括起来:
select date,concat("[",GROUP_CONCAT(column1 SEPARATOR ','),"]") AS result
FROM table1
GROUP BY date
ORDER BY date,time
查询结果:
2.入坑操作:
当对多张相似结构的表也通过date进行分组,使用逗号分隔符拼接,再联合查询组合多张表的结果时,发现查询出的column1、column2结果不全。column1的值只有正常结果的一截:[22996.800,23283.600,28314.100,23773.800, 连末尾拼接的中括号也没有了。
SELECT
A.date,
column1,
column2
FROM
(
( SELECT date, CONCAT( '[', group_concat( predict_value SEPARATOR ',' ), ']' ) AS column1
FROM table1 GROUP BY date ORDER BY date, time
) AS A,
( SELECT date, CONCAT( '[', group_concat( electricity SEPARATOR ',' ), ']' ) AS column2
FROM table2 GROUP BY date ORDER BY date, time
) AS B
)
WHERE
A.date = B.date
3.解决办法:
通过查询资料发现,group_concat函数有长度限制,默认是1024。使用show variables like "group_concat_max_len"; 命令查看group_concat函数长度果然是1024。
自定义长度需要在MySQL的配置文件my.ini中加上一行配置:group_concat_max_len = -1 ( -1为最大值或填入自己指定的长度)
最后,重启mysql即可