--测试数据
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                  
*/