mysql 行专列

以备后用查找


CREATE TABLE student (
  id INT  NOT NULL auto_increment,
  `name` varchar(50) DEFAULT NULL,
  `subject` varchar(50) DEFAULT NULL,
  `score` int(11) DEFAULT NULL,
  primary key (id)

);


insert into student(name,subject,score) values
('刘能' , 'chinese' , 10),
('刘能' , 'math' , 20),
('刘能' , 'english' , 30),
('赵四' , 'chinese' , 40),
('赵四' , 'math' , 50),
('赵四' , 'english' , 60),
('谢广坤' , 'chinese' , 70),
('谢广坤' , 'math' , 80),
('谢广坤' , 'english' , 90);




第1种方式: case  when

select name,
sum( case subject when 'chinese' then score else 0 end)  as 'chinese',
sum( case subject when 'math' then score else 0 end) as 'math',
sum( case subject when 'english' then score else 0 end) as 'english'
from student
group by name;



第2种方式:  if( ,  , )

select name,
 max(IF(subject = 'chinese',score,0)) as 'chinese',
 max(IF(subject = 'math',score,0)) as 'math',
 max(IF(subject = 'english',score,0)) as 'english',
 sum(score) as'total'
from student
group by name



注: 上面的两种方式中的   max()  或  sum()  两者针对这种场景均可互换,   if(,   ,)感觉更简洁。两者性能没有比较过。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值