create table stuent(
name varchar(100) primary key,
cource varchar(100),
score int);
insert into student(name,cource,score)values('张三','语文',64);
insert into student(name,cource,score)values('张三','数学',75);
insert into student(name,cource,score)values('张三','外语',92);
insert into student(name,cource,score)values('李四','语文',85);
insert into student(name,cource,score)values('李四','数学',88);
insert into student(name,cource,score)values('李四','外语',63);
insert into student(name,cource,score)values('王五','语文',76);
insert into student(name,cource,score)values('王五','数学',94);
insert into student(name,cource,score)values('王五','外语',58);
想要实现的结果为
姓名
语文
数学
外语
张三
64
75
92
李四
85
88
63
王五
76
94
58
方法一:使用sum(if())生成列
其中sum可以替换成其他的聚合函数,例如max等
select
name as'姓名',min(if(cource='语文',(case when score>=60and score<80 then '良',
case when score<60 then '差',
case when score>80 then '优'),0))as'语文',sum(if(cource='数学',score,0))as'数学',sum(if(cource='外语',score,0))as'外语'from student
group by name;
方法二:使用max(case…when…then…else end) as 生成数据
select
name as'姓名',sum(case cource when '语文' then score else0 end)as'语文',sum(case cource when '数学' then score else0 end)as'数学',sum(case when cource ='英语' then score else0 end)as'英语',