如何返回SQL查询中低于平均值的学生
对于我的作业,我们必须返回低于平均值的学生人数,学生在第86节,成绩类型代码为“FI”。我觉得我的结构正确,因为我能够返回所有结果,但我无法确定如何使他们低于平均值。这是我的东西,谢谢 编辑:必须使用子查询来实现此目标如何返回SQL查询中低于平均值的学生,sql,oracle,Sql,Oracle,对于我的作业,我们必须返回低于平均值的学生人数,学生在第86节,成绩类型代码为“FI”。我觉得我的结构正确,因为我能够返回所有结果,但我无法确定如何使他们低于平均值。这是我的东西,谢谢 编辑:必须使用子查询来实现此目标 SELECT COUNT(g.student_id) BELOW_AVERAGE FROM grade g WHERE g.section_id= 86 AND g.grade_type_code = 'FI' HAVING AVG(numeric_grade) = (SEL
SELECT COUNT(g.student_id) BELOW_AVERAGE
FROM grade g
WHERE g.section_id= 86
AND g.grade_type_code = 'FI'
HAVING AVG(numeric_grade) = (SELECT AVG(below_avg)
FROM
(SELECT AVG(g.numeric_grade) below_avg
FROM grade g
WHERE g.section_id = 86
AND g.grade_type_code = 'FI'))
使用
AVG
作为分析函数,这样您就不必查询表两次:
SELECT COUNT( DISTINCT student_id ) AS number_below_average
FROM (
SELECT student_id,
numeric_grade,
AVG( numeric_grade ) OVER () as avg_numeric_grade
FROM grade
WHERE section_id = 86
AND grade_type_code = 'FI'
)
WHERE numeric_grade < avg_numeric_grade
然后两个查询都会输出:
|低于平均数|
| -------------------: |
| 5 |
dbfiddle这算是子查询吗?对不起,我们应该在问题中指定使用子查询吗?@TaylorDamron updated非常感谢。我会多看一点,这样我会更理解它,因为我的老师解释的方式是我们需要选择陈述,所以我很高兴事实并非如此。我不确定我是否得到了正确的答案,但我很难解释这个问题,正如你所说的“平均值”这是没有意义的,因为一旦你有了第一个平均值,你就有了一个单一的值,所以第二个平均值将是相同的值(如果你的老师希望你使用
HAVING
子句,那么这意味着比单一平均值更复杂的事情)。如果您的问题中包含一些示例数据和预期输出,这样我们就可以了解预期结果,这会有所帮助。
| NUMBER_BELOW_AVERAGE |
| -------------------: |
| 5 |