解释
group_concat
用在 group
分组的时候,连接多行的字段拼接在一起。
语法
完整的语法如下:
group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔符'])
演示
- 表数据如下:
mysql> select * from t1;
+-------+-------+
| id | name |
+-------+-------+
| 10001 | 沙 |
| 10001 | 石 |
| 10001 | 煤 |
| 10002 | 水 |
| 10002 | 盐 |
| 10002 | 盐 |
| 10002 | 盐2 |
+-------+-------+
把name字段的值打印在一行,逗号分隔(默认)
- 处理1:合并字段到一行
执行SQL:
SELECT id, GROUP_CONCAT(`name`) FROM `t1` GROUP BY id;
运行结果如下:
+-------+------------------------+
| id | GROUP_CONCAT(`name`) |
+-------+------------------------+
| 10001 | 沙,石,煤 |
| 10002 | 水,盐,盐,盐2 |
+-------+------------------------+
- 处理2:合并字段不同的值到一行
执行SQL:
SELECT id, GROUP_CONCAT(DISTINCT `name`) FROM `t1` GROUP BY id;
运行结果如下:
+-------+-------------------------------+
| id | GROUP_CONCAT(DISTINCT `name`) |
+-------+-------------------------------+
| 10001 | 沙,煤,石 |
| 10002 | 水,盐,盐2 |
+-------+-------------------------------+
- 处理3:合并字段到一行,且排序
执行SQL:
SELECT id, GROUP_CONCAT(`name` ORDER BY `name` DESC) FROM `t1` GROUP BY id;
运行结果如下:
+-------+--------------------------------------------+
| id | GROUP_CONCAT(`name` ORDER BY `name` DESC) |
+-------+--------------------------------------------+
| 10001 | 石,煤,沙 |
| 10002 | 盐2,盐,盐,水 |
+-------+--------------------------------------------+
使用group_concat_max_len系统变量,你可以设置允许的最大长度。 程序中进行这项操作的语法如下,其中 val 是一个无符号整数:SET [SESSION | GLOBAL] group_concat_max_len = val;若已经设置了最大长度, 则结果被截至这个最大长度。将环境变量group_concat_max_len 增大。默认是1024.我就设置了session级的环境变量将其变为2048(不够用再加大)。解决该问题