select t.name 学生Name,c.不及格,c.及格 From stu t innerjoin(select b.no,sum(casewhen b.result<60then1else0end) 不及格,sum(casewhen b.result>=60then1else0end) 及格 From res b groupby b.no) c on t.no=c.no;
B结果答案
select t.name 学生Name,c.数学,c.语文,c.英语 From stu t innerjoin(select b.no,sum(casewhen b.course='数学'then b.result else0end) 数学,sum(casewhen b.course='语文'then b.result else0end) 语文,sum(casewhen b.course='英语'then b.result else0end) 英语
From res b groupby b.no) c on t.no=c.no;
第二题【列转行】
答案
select a.zh,sum(casewhen a.date='202301'then a.amt else0end) a,sum(casewhen a.date='202302'then a.amt else0end) b,sum(casewhen a.date='202303'then a.amt else0end) c
From account a groupby a.zh;
having的使用
找到表中,名字重复的项
select t.name From person t groupby t.name havingcount(*)>1;