博客
关于我
mysql-group_concat
阅读量:792 次
发布时间: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 id自动增长 初始值 Mysql重置auto_increment初始值
查看>>
MySQL in 太多过慢的 3 种解决方案
查看>>
MySQL InnoDB 三大文件日志,看完秒懂
查看>>
Mysql InnoDB 数据更新导致锁表
查看>>
Mysql Innodb 锁机制
查看>>
MySQL InnoDB中意向锁的作用及原理探
查看>>
MySQL InnoDB事务隔离级别与锁机制深入解析
查看>>
Mysql InnoDB存储引擎 —— 数据页
查看>>
Mysql InnoDB存储引擎中的checkpoint技术
查看>>
Mysql InnoDB存储引擎中缓冲池Buffer Pool、Redo Log、Bin Log、Undo Log、Channge Buffer
查看>>
MySQL InnoDB引擎的锁机制详解
查看>>
Mysql INNODB引擎行锁的3种算法 Record Lock Next-Key Lock Grap Lock
查看>>
mysql InnoDB数据存储引擎 的B+树索引原理
查看>>
mysql innodb通过使用mvcc来实现可重复读
查看>>
mysql insert update 同时执行_MySQL进阶三板斧(三)看清“触发器 (Trigger)”的真实面目...
查看>>
mysql interval显示条件值_MySQL INTERVAL关键字可以使用哪些不同的单位值?
查看>>
Mysql join原理
查看>>
MySQL JOIN原理
查看>>
MySQL Join算法与调优白皮书(二)
查看>>
Mysql order by与limit混用陷阱
查看>>