--测试数据
create table 课程信息表 (课程ID varchar(10), 课程名称 varchar(20))
insert into 课程信息表
select '001','语文' union all
select '002','数学' union all
select '003','英语'create table 学员信息表 (学员ID varchar(10),姓名 varchar(20),届数 int,班级 varchar(10))
insert into 学员信息表
select '0001','李三', 2003, 'A' union all
select '0002','李四', 2003 , 'A' union all
select '0003','张五', 2003 , 'A' union all
select '0004','陈六', 2003 , 'B' union all
select '0005','张七', 2002 , 'A'create table 学员缺勤表 (ID int,学员ID varchar(10),课程ID varchar(10),考勤周数 int,出勤情况 tinyint)
insert into 学员缺勤表
select 1,'0001','001',1,1 union all
select 2,'0001','002',1,0 union all
select 3,'0001','001',2,0 union all
select 4,'0002','003',1,1 union all
select 5,'0002','001',1,0 union all
select 50,'0005','001',4,1--不过滤未缺勤的学员
select
c.学员ID,
min(c.姓名) as 姓名,
sum(if(a.课程名称='语文',1,0)) as 语文,
sum(if(a.课程名称='数学',1,0)) as 数学,
sum(if(a.课程名称='英语',1,0)) as 英语
from 课程信息表 a right join 学员缺勤表 b on a.课程ID = b.课程ID right join 学员信息表 c on b.学员ID = c.学员ID
group by c.学员ID/*
学员ID 姓名 语文 数学 英语
0001 李三 2 1 0
0002 李四 1 0 1
0003 张五 0 0 0
0004 陈六 0 0 0
0005 张七 1 0 0
*/--过滤缺勤的学员
select
b.学员ID,
min(b.姓名) as 姓名,
sum(if(c.课程名称='语文',1,0)) as 语文,
sum(if(c.课程名称='数学',1,0)) as 数学,
sum(if(c.课程名称='英语',1,0)) as 英语
from 学员缺勤表 a join 学员信息表 b on a.学员ID = b.学员ID join 课程信息表 c on a.课程ID = c.课程ID
group by b.学员ID/*
学员ID 姓名 语文 数学 英语
0001 李三 2 1 0
0002 李四 1 0 1
0005 张七 1 0 0
*/
create table 课程信息表 (课程ID varchar(10), 课程名称 varchar(20))
insert into 课程信息表
select '001','语文' union all
select '002','数学' union all
select '003','英语'create table 学员信息表 (学员ID varchar(10),姓名 varchar(20),届数 int,班级 varchar(10))
insert into 学员信息表
select '0001','李三', 2003, 'A' union all
select '0002','李四', 2003 , 'A' union all
select '0003','张五', 2003 , 'A' union all
select '0004','陈六', 2003 , 'B' union all
select '0005','张七', 2002 , 'A'create table 学员缺勤表 (ID int,学员ID varchar(10),课程ID varchar(10),考勤周数 int,出勤情况 tinyint)
insert into 学员缺勤表
select 1,'0001','001',1,1 union all
select 2,'0001','002',1,0 union all
select 3,'0001','001',2,0 union all
select 4,'0002','003',1,1 union all
select 5,'0002','001',1,0 union all
select 50,'0005','001',4,1--不过滤未缺勤的学员
select
c.学员ID,
min(c.姓名) as 姓名,
sum(if(a.课程名称='语文',1,0)) as 语文,
sum(if(a.课程名称='数学',1,0)) as 数学,
sum(if(a.课程名称='英语',1,0)) as 英语
from 课程信息表 a right join 学员缺勤表 b on a.课程ID = b.课程ID right join 学员信息表 c on b.学员ID = c.学员ID
group by c.学员ID/*
学员ID 姓名 语文 数学 英语
0001 李三 2 1 0
0002 李四 1 0 1
0003 张五 0 0 0
0004 陈六 0 0 0
0005 张七 1 0 0
*/--过滤缺勤的学员
select
b.学员ID,
min(b.姓名) as 姓名,
sum(if(c.课程名称='语文',1,0)) as 语文,
sum(if(c.课程名称='数学',1,0)) as 数学,
sum(if(c.课程名称='英语',1,0)) as 英语
from 学员缺勤表 a join 学员信息表 b on a.学员ID = b.学员ID join 课程信息表 c on a.课程ID = c.课程ID
group by b.学员ID/*
学员ID 姓名 语文 数学 英语
0001 李三 2 1 0
0002 李四 1 0 1
0005 张七 1 0 0
*/
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货