MySQL列转行

MySQL列转行

列:数据库中存在如下的数据

教师ID星期是否有课
111
121
211
341
411

统计出每个老师每个工作日的上课数,要求结构如下

教师ID星期一星期二星期三星期四
11121
21101
  • 首先创建表
create table teacher (
 teacher_id int,
 week varchar(11),
 have_class TINYINT(1)
 );
 
 insert into teacher values(1,1,1);
 insert into teacher values(1,3,1);
 insert into teacher values(1,4,1);
 insert into teacher values(1,5,1);

 insert into teacher values(2,2,0);
 insert into teacher values(2,3,0);
 insert into teacher values(2,5,0);
 
 insert into teacher values(3,3,1);
 insert into teacher values(3,4,1);
 insert into teacher values(3,2,1);
  • 查询语句
SELECT 
teacher_id as 教师号,
SUM(IF(week = 1,have_class,0)) 星期一,
SUM(IF(week = 2,have_class,0)) 星期二,
SUM(IF(week = 3,have_class,0)) 星期三,
SUM(IF(week = 4,have_class,0)) 星期四,
SUM(IF(week = 5,have_class,0)) 星期五,
SUM(IF(week = 6,have_class,0)) 星期六
 FROM teacher GROUP BY teacher_id

除此之外还可以使用

sum (
case week 
when 1 then have_class
else 0
end
)
  • 查询结果
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值