Sql 以下平均子查询未显示正确结果
我试图列出在第三次测验中成绩低于平均水平的学生 首先我选择Sql 以下平均子查询未显示正确结果,sql,oracle,Sql,Oracle,我试图列出在第三次测验中成绩低于平均水平的学生 首先我选择 SELECT s.STUDENT_ID, s.LAST_NAME,g.GRADE_TYPE_CODE,AVG (g.NUMERIC_GRADE) AS GRADE FROM STUDENT s, GRADE g WHERE s.STUDENT_ID = g.STUDENT_ID AND g.SECTION_ID = 135 AND g.GRADE_TYPE_CODE= 'QZ' AND g.GRADE_CODE_OCCURRENCE =
SELECT s.STUDENT_ID, s.LAST_NAME,g.GRADE_TYPE_CODE,AVG (g.NUMERIC_GRADE) AS GRADE
FROM STUDENT s, GRADE g
WHERE s.STUDENT_ID = g.STUDENT_ID
AND g.SECTION_ID = 135 AND g.GRADE_TYPE_CODE= 'QZ' AND g.GRADE_CODE_OCCURRENCE = 3
GROUP BY s.STUDENT_ID, s.LAST_NAME,g.GRADE_TYPE_CODE
我得到了四个平均的结果
STUDENT_ID LAST_NAME GRADE
---------- ------------------------- ----------
178 Kurtz 98
215 Chatman 90
259 Merriman 81
214 Williams 99
但当我想选择那些接收到低于平均水平的人时,我选择了165行
SELECT z.STUDENT_ID, z.LAST_NAME
FROM STUDENT z, GRADE w
WHERE z.STUDENT_ID = w.STUDENT_ID
GROUP BY z.STUDENT_ID, z.LAST_NAME
HAVING COUNT(*) <
(SELECT AVG(GRADE)
FROM
(SELECT s.STUDENT_ID, s.LAST_NAME,g.GRADE_TYPE_CODE,AVG (g.NUMERIC_GRADE) AS GRADE
FROM STUDENT s, GRADE g
WHERE s.STUDENT_ID = g.STUDENT_ID
AND g.SECTION_ID = 135 AND g.GRADE_TYPE_CODE= 'QZ' AND g.GRADE_CODE_OCCURRENCE = 3
GROUP BY s.STUDENT_ID, s.LAST_NAME,g.GRADE_TYPE_CODE ))
ORDER BY z.LAST_NAME;
我做错了什么?我如何列出成绩低于平均分的学生?如果我正确理解了你的问题,下面是一个简化版本,使用了avg over的常用表格表达式:
如果我正确理解了您的问题,下面是一个简化版本,它使用了一个使用avg over的通用表表达式:
如果我正确理解了您的问题,下面是一个简化版本,它使用了一个使用avg over的通用表表达式:
如果我正确理解了您的问题,下面是一个简化版本,它使用了一个使用avg over的通用表表达式:
with cte as (
select s.student_id, s.last_name, g.numeric_grade,
avg(g.numeric_grade) over () average
from student s
join grade g on s.student_id = g.student_id
where g.section_id = 135
and g.grade_type_code = 'QZ'
and g.grade_code_occurence = 3
)
select student_id, last_name
from cte
group by student_id, last_name
having avg(numeric_grade) < avg(average)