sql 分组 case when 写法

表结构:
create table scores (studentId int primary key,subject varchar(10),mark number(3,1));

描述:这是一张学生成绩表,字段分别为学生id,科目,成绩.

假如有如下数据

studentId subject mark
1 A 87.0
2 A 89.0
3 B 89.0
4 A 78.9
5 A 88.9
6 B 78.9
7 B 98.9
8 C 86.9
9 C 96.9
10 C 78.5

要求每门科目的平均成绩以及该门科目的优秀率,优秀率为每门科目中成绩高于85的人数占该科目总人数的比例。

想了一阵用group 分组似乎写不出来。问题在于分组后,要计算该组中成绩超过85的人数,不知道该怎么实现这一点。

后来在cnoug上网友帮我解决了,在这里记录下来。

主要用到了case when 条件控制.

select round(avg(mark),2) avg_mark,
round(count(case
when mark >= 85 then
1
end) / count(*) * 100,2) p
from scores
group by subject


其中round(m,n)函数为四舍五入函数,n为小数点后要保留的位数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值