sql 分组 case when 写法
程序员文章站
2022-07-09 09:02:24
...
表结构:
描述:这是一张学生成绩表,字段分别为学生id,科目,成绩.
假如有如下数据
要求每门科目的平均成绩以及该门科目的优秀率,优秀率为每门科目中成绩高于85的人数占该科目总人数的比例。
想了一阵用group 分组似乎写不出来。问题在于分组后,要计算该组中成绩超过85的人数,不知道该怎么实现这一点。
后来在cnoug上网友帮我解决了,在这里记录下来。
主要用到了case when 条件控制.
其中round(m,n)函数为四舍五入函数,n为小数点后要保留的位数。
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为小数点后要保留的位数。
上一篇: 两端是圆角的进度条
推荐阅读
-
SQL之case when then else end用法介绍
-
MS SQL的CASE...WHEN...THEN...END语法
-
SQL中的case when then else end用法
-
SQL利用Case When Then多条件判断
-
sql 分组 case when 写法
-
sql学习之CASE WHEN THEN ELSE END的用法
-
sql语句case when then else end 返回一个符合条件的值
-
sql 分组 case when 写法
-
Oracle SQL nvl(),listagg() within group(),TO_CHAR(),CASE WHEN THEN ELSE END
-
sql查询各科成绩最高分、最低分和平均分(case when then else end)