欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

sql 分组 case when 写法

程序员文章站 2022-07-03 13:06:35
...
表结构:
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为小数点后要保留的位数。