博客
关于我
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修改密码报错ERROR 1396 (HY000): Operation ALTER USER failed for ‘root‘@‘localhost‘
查看>>
Mysql全局优化参数
查看>>
MySQL全文索引实现简单版搜索引擎
查看>>
MySQL全面瓦解:安装部署与准备
查看>>
mysql共享锁与排他锁
查看>>
MySQL内存表使用技巧
查看>>
MySQL再叙(体系结构、存储引擎、索引、SQL执行过程)
查看>>
mysql出现错误的解决办法
查看>>
MySQL函数
查看>>
mysql函数汇总之字符串函数
查看>>
mysql函数汇总之数学函数
查看>>
mysql函数汇总之日期和时间函数
查看>>
mysql函数汇总之条件判断函数
查看>>
mysql函数汇总之系统信息函数
查看>>
MySQL函数简介
查看>>
mysql函数遍历json数组
查看>>
MySQL函数(转发)
查看>>
mysql分区表
查看>>
MySQL分层架构与运行机制详解
查看>>
mysql分库分表中间件简书_MySQL分库分表
查看>>