博客
关于我
mysql-group_concat
阅读量:797 次
发布时间: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 使用sql文件恢复数据库
查看>>
mysql 修改默认字符集为utf8
查看>>
Mysql 共享锁
查看>>
MySQL 内核深度优化
查看>>
mysql 内连接、自然连接、外连接的区别
查看>>
mysql 写入慢优化
查看>>
mysql 分组统计SQL语句
查看>>
Mysql 分页语句 Limit原理
查看>>
MySQL 创建新用户及授予权限的完整流程
查看>>
mysql 创建表,不能包含关键字values 以及 表id自增问题
查看>>
mysql 删除日志文件详解
查看>>
mysql 判断表字段是否存在,然后修改
查看>>
MySQL 多表联合查询:UNION 和 JOIN 分析
查看>>
MySQL 大数据量快速插入方法和语句优化
查看>>
mysql 如何给SQL添加索引
查看>>
mysql 字段区分大小写
查看>>
mysql 字段合并问题(group_concat)
查看>>
mysql 字段类型类型
查看>>
MySQL 存储引擎
查看>>