mysql数据库行列转换

例1:

思路:

1.建表并插入数据
CREATE table score(
name varchar(11),
Math int,
English int
);
insert into score (name,Math,English) values ('甲',89,78)
insert into score values ('乙',77,81)
insert into score values ('丙',87,98)

在这里插入图片描述

2.中间转换,即二维转一维得到一维表
3.利用IF判断并分组即可得到转换的表
select 
c2 as '课程',
sum(if(c1='甲',c3,0)) as '甲',
sum(if(c1='乙',c3,0)) as '乙',
sum(if(c1='丙',c3,0)) as '丙' 
from
((select name as c1,'Math' as c2,Math as c3 from score )
union
(select name,'English' as c2,English from score) ) 
as tx
group by c2

在这里插入图片描述

例2:

创建表并添加数据
create table usera(
userid int,
Type int,
Duration_sum int
)
alter table usera modify Duration_sum varchar(30)
insert into usera values (51855025,1,1225)
insert into usera values (51855025,2,2705)
insert into usera values (53711033,1,'......')
insert into usera values (53711033,2,'......')

在这里插入图片描述
(省略号代表的是数据。。。。)

select
userid,
sum(if(Type=1,Duration_sum,0)) as Duration_sum_type1,
sum(if(Type=2,Duration_sum,0)) as Duration_sum_type2
from
usera
group by userid

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值