MySQL行列互转

博客主要介绍了MySQL中行列互转的实现方法。列转行部分构建成绩表,查看表结构,并使用case when和if函数实现;行转列部分同样构建成绩表、查看表结构,用union实现。还给出了相关参考链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

列转行:

构建用于行转列的成绩表:

# 创建学生成绩表scores1,用于行转列测试
create table scores1(
sname varchar(10) not null default '',
course varchar(10) not null default '',
score int not null default 0
)engine myisam charset utf8mb4;

# 向成绩表scores1中插入数据
insert into scores1 values
('张三','语文',74),
('张三','数学',83),
('张三','物理',93),
('李四','语文',74),
('李四','数学',84),
('李四','物理',94);

查看成绩表scores1的表结构:

select * from scores1

使用case when函数实现行转列:

select sname,
max(case course when '语文' then score else 0 end) as 语文,
max(case course when '数学' then score else 0 end) as 数学,
max(case course when '物理' then score else 0 end) as 物理
from scores1
group by sname

使用if函数实现行转列:

select sname,
max(if(course='语文',score,0)) as 语文,
max(if(course='数学',score,0)) as 数学,
max(if(course='物理',score,0)) as 物理
from scores1
group by sname

行转列:

构建用于列转行的成绩表:

# 创建学生成绩表scores2,用于列转行测试
create table scores2(
sname varchar(10) not null default '',
语文 int not null default 0,
数学 int not null default 0,
物理 int not null default 0
)engine myisam charset utf8mb4;

# 向成绩表scores2中插入数据
insert into scores2 values
('张三',74,83,93),
('李四',74,84,94);

查看成绩表scores2的表结构:

select * from scores2

使用union实现列转行:

select sname,'语文' as course, 语文 as score from scores2
union select sname, '数学' as course, 数学 as score from scores2
union select sname, '物理' as course, 物理 as score from scores2
order by sname

# 上述代码中'语文','数学'和'物理'是新建立的course字段中的值
# 而语文、数学和物理均指成绩表scores2中的字段

 

参考:

https://blog.youkuaiyun.com/qq_41080850/article/details/95357987

https://www.cnblogs.com/ken-jl/p/8570518.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值