nfn*_*nmy 2 t-sql sql-server average
我创建了一个视图,其中包含:
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
Run Code Online (Sandbox Code Playgroud)
我想得到:
每个学生的平均成绩,例如 Jennifer Higgins 就读于 CS1234 和 CS1235。她的平均分是 85.50。
然后将詹妮弗·希金斯的分数与所有入学的平均分数进行比较,从而将所有科目的 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
Run Code Online (Sandbox Code Playgroud)
//编辑
输出应该看起来像。卡尔·潘和汉·索罗没有被列入名单,因为他们没有获得高于平均分的分数。所有科目的平均分是69.33。汉·索罗 (Han Solo) 得到 57.5 分,卡尔·潘 (Kal Penn) 得到 65 分。
student_full_name subject_code result
Jennifer Higgins CS1234 85.5
Run Code Online (Sandbox Code Playgroud)
有什么帮助吗?
如果您想在聚合后过滤结果(例如avg),则需要使用having而不是where。
一般规则是:
where在聚合发生之前过滤从实际数据库中获取的原始(非聚合)行;和having过滤最终交付给您的(可能是聚合的)行。像这样的东西(尽管未经测试):
SELECT student_full_name,
AVG (results) AS average_result
FROM viewEnrol
GROUP BY student_full_name
HAVING AVG (results) > ( SELECT AVG (results) FROM viewEnrol )
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
37233 次 |
| 最近记录: |