MySQL知识要点9--行转列

数据格式为
name cource score
张三 语文 64
张三 数学 75
张三 外语 92
李四 语文 85
李四 数学 88
李四 外语 63
王五 语文 76
王五 数学 94
王五 外语 58
创建数据表,插入数据
	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>=60 and 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 else 0 end) as '语文',
	sum(case cource when '数学' then score else 0 end) as '数学',
	sum(case when cource ='英语' then score else 0 end) as '英语',

猜你喜欢

转载自blog.csdn.net/qq_31307291/article/details/87883275