博客
关于我
mysql-group_concat
阅读量:800 次
发布时间:2023-02-11

本文共 1188 字,大约阅读时间需要 3 分钟。

数据库中的数据通常以行存储,但在取出时可能需要转换格式进行显示,比如行转列、列转行或单元格合并等操作。本文以MySQL为例,说明如何通过group_concat函数实现行转列的操作。

原数据格式

以下为学生表的原始数据格式:

ID NAME SUBJECT SUB_SCORE
1 小红 数学 90
2 小红 语文 91
3 小红 英语 92
4 小明 数学 80
5 小明 语文 81
6 小明 英语 82
7 小华 数学 70
8 小华 语文 71
9 小华 英语 72

期望输出格式

目标是将学生的科目和分数从行格式转换为列格式。以下是两种常见的输出格式:

格式一

将多个科目和分数用逗号分隔:

ID | NAME | subjects | scores1 | 小红 | 数学,语文,英语 | 90,91,924 | 小明 | 数学,语文,英语 | 80,81,827 | 小华 | 数学,语文,英语 | 70,71,72

格式二

将科目和分数用竖线分隔:

ID | NAME | subjects | scores1 | 小红 | 数学|语文|英语 | 90|91|924 | 小明 | 数学|语文|英语 | 80|81|827 | 小华 | 数学|语文|英语 | 70|71|72

实现方法

方法一:使用group_concat函数

对于数字类型字段,需要进行转义以避免类型转换问题。以下是实现格式一的SQL语句:

SELECT id, name,        group_concat(subject separator '|') as subjects,       group_concat(cast(sub_score as char) separator '|') as scoresFROM studentGROUP BY nameORDER BY name DESC

方法二:使用replace函数

另一种实现方式是使用replace函数将逗号转换为竖线。以下是实现格式二的SQL语句:

SELECT id, name,        group_concat(subject separator '|') as subjects,       replace(group_concat(sub_score), ',', '|') as scoresFROM studentGROUP BY nameORDER BY name DESC

执行结果

以下是执行上述SQL语句后的结果示例:

ID NAME subjects scores
1 小红 数学 语文 英语 90 91 92
4 小明 数学 语文 英语 80 81 82
7 小华 数学 语文 英语 70 71 72

通过上述方法,可以轻松实现行转列的操作,并根据实际需求选择合适的格式和方法。

转载地址:http://tcbfk.baihongyu.com/

你可能感兴趣的文章
MySQL存储过程入门
查看>>
mysql存储过程批量建表
查看>>
MySQL存储过程的使用实现数据快速插入
查看>>
mysql存储过程详解
查看>>
Mysql存表情符号发生错误
查看>>
MySQL学习-group by和having
查看>>
MySQL学习-MySQL数据库事务
查看>>
MySQL学习-MySQL条件查询
查看>>
MySQL学习-SQL语句的分类与MySQL简单查询
查看>>
MySQL学习-子查询及limit分页
查看>>
MySQL学习-排序与分组函数
查看>>
MySQL学习-连接查询
查看>>
Mysql学习总结(10)——MySql触发器使用讲解
查看>>
Mysql学习总结(11)——MySql存储过程与函数
查看>>
Mysql学习总结(12)——21分钟Mysql入门教程
查看>>
Mysql学习总结(13)——使用JDBC处理MySQL大数据
查看>>
Mysql学习总结(14)——Mysql主从复制配置
查看>>
Mysql学习总结(15)——Mysql错误码大全
查看>>
Mysql学习总结(16)——Mysql之数据库设计规范
查看>>
Mysql学习总结(17)——MySQL数据库表设计优化
查看>>