MySQL实现行列转换


本文整理自网络,侵删。

实际应用中,会遇到需要把表的某些行转换成列,或者把列转换成行的情况。比如一张表在数据库中是这样的:

图1

但是,需要的结果可能是这样:

图2

这个时候就得行列转换了。

1.行转列的几种方法

1.1 case... when ... then ... else ... end

select uname,uid, -- 正常查询的字段
sum(
case
when course ='英语' then score -- 需要转换的字段
else 0
end) '英语',
sum(
case
when course= '物理' then score
else 0
end) '物理',
sum(
case 
when course='化学' then score
else 0
end) '化学'
from course
group by uid

另一种写法:

case course
when '化学' then score
else 0
end

另外若省略‘else 0‘,则没有该课程的同学的分数会填充为null; sum替换成max结果一样。

1.2 if (`字段名1`=‘字段值’,,)

select uname,uid,
sum(if(`course`='英语',score,0)) '英语',
sum(if(`course`='物理',score,0)) '物理',
sum(if(`course`='化学',score,0)) '化学'
from course
group by uname

貌似比第一种方法简洁一些,所以下面的扩展是基于这种方法的~

以上两种转换方法结果相同,如图2。另外实际应用中还可能需要有总计的结果,如图3.

图3

total这一列简单,直接在之前的查询基础上加一个sum(score) 'total'即可;Total这一行则可以看成之前的查询不加group by而聚合成一行。因此可以看做是两个表组合到一起如图4和图5:

图4

阅读剩余部分

相关阅读 >>

如何下载5.5版的mysql

mysql慢查询以及重构查询的方式记录

浅谈mysql的事务隔离

mysql启动失败:mysql服务无法启动怎么办

mysql 如何改变列的顺序

mysql 5.7版本是怎么修改密码的?

mysql如何多表连接sql语句

mysql 8.0.20 window10免安装版配置及navicat管理教程图文详解

mysql5.7以上版本配置my.ini的详细步骤

如何更改mysql数据库的编码字符集

更多相关阅读请进入《mysql》频道 >>


数据库系统概念 第6版
书籍

数据库系统概念 第6版

机械工业出版社

本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...