首页 > 解决方案 > 计算满足特定条件的不同值

问题描述

我正在制作一张表格,描述多个班级的学生在多次考试中的分数。我想要做的是获得平均分数超过 80 的班级数量。该表如下所示:

Score_summary
班级 学生 考试 分数
Class_A 学生_1 考试_A 90
Class_A 学生_1 考试_B 0
Class_A 学生_2 考试_A 30
Class_A 学生_2 考试_B 40
Class_B 学生_3 考试_A 100
Class_B 学生_3 考试_B 80
Class_B 学生_4 考试_A 80
Class_B 学生_4 考试_B 90

到目前为止,我设法获得了符合条件的班级及其各自平均分的表格。如:

班级 平均分
Class_B 90

为了得到这个结果,我尝试了:

Select `Score_summary`.`Class` AS `Class`, avg(`Score_summary`.`Score`) AS `Average_Score`
From `Score_summary`
Group by `Class`
Having `Average_Score` > 80

最后一步是计算我得到的不同课程数量。但我不确定我的想法是否正确。如果是,那么问题将是“有没有办法在拥有后再次选择?” 如果不是,那么这样做的正确方法是什么?

标签: sql

解决方案


添加第二级聚合。

SELECT count(*)
       FROM (SELECT ss.class
                    FROM score_summary ss
                    GROUP BY ss.class
                    HAVING avg(ss.score) > 80) x;

推荐阅读