mysql行列转换

来源:互联网 发布:4g网络哪家好 编辑:程序博客网 时间:2024/05/15 23:46


//创建表

create table tb(name varchar(10),course varchar(10),score int)ENGINE=InnoDB AUTO_INCREMENT=40 DEFAULT CHARSET=utf8 ;



插入数据

insert into tb values('张三' , '语文' , 74)
insert into tb values('张三' , '数学' , 83)
insert into tb values('张三' , '物理' , 93)
insert into tb values('李四' , '语文' , 74)
insert into tb values('李四' , '数学' , 84)

insert into tb values('李四' , '物理' , 94)


有几个地方注意

SELECT name as 姓名,
case course WHEN '语文' THEN score else 0 END as 语文 from tb GROUP BY name 
可以查出想要的结果,但是

SELECT name as 姓名,
case course WHEN '物理' THEN score else 0 END as 物理 from tb GROUP BY name查出的结果为0,分析可知我们按照名字分组后物理在最后,最前面显示的肯定是语文,由于分组后它仍然排在第一,我们不按照名字分组时查出的结果是6个,如下图,当我们分组后自然最先显示最开始的两个为0的,这里可以想象按照名字分组是把相同的从上往下压缩。


把它改为下面就行了

SELECT name as 姓名,
max(case course WHEN '物理' THEN score else 0 END) as 物理 from tb GROUP BY name

经过下面转化后得到

select name as 姓名,
max(case course WHEN '语文' THEN score else 0 END)as 语文,
max(case course WHEN '物理' THEN score else 0 END)as 物理
from tb
GROUP BY name;














0 0
原创粉丝点击