ZBLOG

mysql 如何把group_concat的结果拆分成多行

可以使用 SUBSTRING_INDEX 函数将 group_concat 的结果拆分成多行。例如,假设有以下表:

CREATE TABLE `students` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) NOT NULL,
  `subjects` varchar(100) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

现在需要根据 subjects 字段对学生进行分组,并将每个学生的课程拆分成多行。可以使用以下 SQL 语句实现:

SELECT name, 
       SUBSTRING_INDEX(SUBSTRING_INDEX(subjects, ',', n), ',', -1) as subject
FROM students
JOIN (SELECT 1 n UNION ALL SELECT 2 UNION ALL SELECT 3) nums
ON CHAR_LENGTH(subjects)-CHAR_LENGTH(REPLACE(subjects,',',''))>=n-1;

该语句将学生的课程通过逗号分隔符拆分为多个字符串,并将其作为子查询中的 num 表进行连接。然后使用 SUBSTRING_INDEX 函数按照逗号分隔符将字符串进一步拆分,生成多行记录。

例如,如果数据如下所示:

INSERT INTO students(name, subjects) VALUES('张三', '数学,英语,物理');
INSERT INTO students(name, subjects) VALUES('李四', '语文,化学');
INSERT INTO students(name, subjects) VALUES('王五', '生物');

则执行以上 SQL 后,会得到以下结果:

+--------+---------+
| name   | subject |
+--------+---------+
| 张三   | 数学    |
| 张三   | 英语    |
| 张三   | 物理    |
| 李四   | 语文    |
| 李四   | 化学    |
| 王五   | 生物    |
+--------+---------+

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=1639

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?