博客
关于我
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中的undo log、redo log 、binlog大致概要
查看>>
Mysql中的using
查看>>
MySQL中的关键字深入比较:UNION vs UNION ALL
查看>>
mysql中的四大运算符种类汇总20多项,用了三天三夜来整理的,还不赶快收藏
查看>>
mysql中的字段如何选择合适的数据类型呢?
查看>>
MySQL中的字符集陷阱:为何避免使用UTF-8
查看>>
mysql中的数据导入与导出
查看>>
MySQL中的时间函数
查看>>
mysql中的约束
查看>>
MySQL中的表是什么?
查看>>
mysql中穿件函数时候delimiter的用法
查看>>
Mysql中索引的分类、增删改查与存储引擎对应关系
查看>>
Mysql中索引的最左前缀原则图文剖析(全)
查看>>
MySql中给视图添加注释怎么添加_默认不支持_可以这样取巧---MySql工作笔记002
查看>>
Mysql中获取所有表名以及表名带时间字符串使用BetweenAnd筛选区间范围
查看>>
Mysql中视图的使用以及常见运算符的使用示例和优先级
查看>>
Mysql中触发器的使用示例
查看>>
Mysql中设置只允许指定ip能连接访问(可视化工具的方式)
查看>>
mysql中还有窗口函数?这是什么东西?
查看>>
mysql中间件
查看>>