面试-学生成绩问题

表结构如下:

name    schedule   score

'张三'     '语文'         '20'
'张三'     '数学'         '60'
'张三'     '英语'         '80'
'李四'     '数学'         '30'
'李四'     '英语'         '60'
'李四'     '语文'         '80'

 

想要的结果如下:

姓名    语文   数学   英语   总成绩

'张三',  '20',  '60',  '80',  '160'
'李四',  '80',  '30',  '60',  '170'

需要的sql 语句如下:

select t.name,
sum((case when t.schedule ='语文' then t.score ELSE 0 END)) AS 语文,
sum((case when t.schedule ='数学' then t.score ELSE 0 END)) AS 数学,
sum((case when t.schedule ='英语' then t.score ELSE 0 END)) AS 英语,
sum(t.score) as 总成绩
from account t 
group by t.name;


SQL命令中的case...when...then...else...end条件查询(不同于where)

case...when...then...else...end,是在from前面,可以改变记录中某字段的值,不能决定是否显示该记录;

where,是在from后面,不可以改变记录中某字段的值,但可以决定是否显示该记录。

case...when...then...else...end,可用于对同一记录的多个字段求和,带分支判断。

 

另外想要获取 每门课的最高成绩的学生信息sql语句的写法:

select b.* from (select max(score) score,`subject` from classes group by subject) a,classes b 
where a.score = b.score and a.subject = b.subject ;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值