sql-server - 从数据库中获取高于平均水平的学生

我创建了一个包含以下内容的 View :

 student_full_name    subject_code    result
 Jennifer Higgins     CS1234          81
 Jennifer Higgins     CS1235          90
 Kal Penn             CS1234          70
 Kal Penn             CS1235          60
 Han Solo             CS1234          45
 Han Solo             CS1235          70

我想得到:

  1. 每个学生的平均成绩,例如就读 CS1234 和 CS1235 的 Jennifer Higgins。 她的平均分是 85.50。

  2. 然后 Jennifer Higgins 的分数将与所有注册的平均分数进行比较 所以总计所有科目的 AVG(结果)。

  3. 查询将列出所有成绩高于平均分的学生。

我知道我必须在这里使用子查询才能获得所有结果的 AVG。 嗯,这是一种伪代码。我很困惑,因为我不确定如何使子查询将自身与查询结果进行比较。 我很确定我需要两个 group by 语句,一个用于按 student_full_name 分组,另一个用于获得所有平均结果。

 SELECT student_full_name,
        AVG(results) AS average_result
 FROM viewEnrol
 WHERE average_result > ( SELECT (AVG(results))
                          FROM viewEnrol

 GROUP BY student_full_name

//编辑

输出应该是这样的。 Kal Penn 和 Han Solo 没有被列出,因为他们没有达到平均分以上。 所有科目的平均分数为 69.33。 Han Solo 得到 57.5,Kal Penn 得到 65。

 student_full_name    subject_code    result
 Jennifer Higgins     CS1234          85.5

有什么帮助吗?

最佳答案

这应该可以完成工作。第一个内部查询会给你所有学生的平均结果。 第二个将给出表格的平均值。

    SELECT student_full_name 
    FROM (SELECT student_full_name,
                 AVG(results) AS average_Sresult
          FROM viewEnrol
          GROUP BY student_full_name) sre, 
         (SELECT (AVG(results)) tavg
          FROM viewEnrol) ta
     WHERE sre.average_Sresult > ta.tavg

PS:你不应该取平均值而不是取所有结果的平均值。

https://stackoverflow.com/questions/10827852/

相关文章:

caching - 什么是暖缓存?

css - 向右浮动和小时对齐

email - 使用 ssl 的 Yandex smtp 设置

sql-server-2008 - 一个选择语句中的不同条件

string - 将字符串/字符转换为 uint8

ruby-on-rails - rails : how to check if find_or_in

PHP Google Calendar API - 更新事件

sql - 如何优化此 SQL 查询(使用索引)?

php - MySQLi 查询以获取表中的最大 id?

asp.net-mvc-2 - 无法将类型 'double?' 隐式转换为 'double'