I am trying to get a list of students who have above average on the final exam
I first select to get average
SELECT w.LAST_NAME , AVG(s.NUMERIC_GRADE) AS NUMERIC_GRADE
GRADE s , SECTION z, STUDENT w
WHERE s.SECTION_ID = z.SECTION_ID AND s.STUDENT_ID = w.STUDENT_ID
AND s.SECTION_ID = 90 AND s.GRADE_TYPE_CODE = 'FI'
GROUP BY w.LAST_NAME,s.NUMERIC_GRADE
and I get these four results
LAST_NAME NUMERIC_GRADE
------------------------- -------------
Mulroy 83
Da Silva 92
Lopez 91
Abid 84
But when I try to get the above average from these four I get no rows, and it looks like sub-query and main-query have the same conditions. I am not sure how to do above after avg.
SELECT n.LAST_NAME , m.NUMERIC_GRADE
FROM GRADE m , STUDENT n
WHERE m.STUDENT_ID = n.STUDENT_ID
GROUP BY n.LAST_NAME , m.NUMERIC_GRADE
HAVING COUNT(*) >
(SELECT AVG (NUMERIC_GRADE)
FROM
(SELECT w.LAST_NAME , AVG(s.NUMERIC_GRADE) AS NUMERIC_GRADE
FROM GRADE s , SECTION z, STUDENT w
WHERE s.SECTION_ID = z.SECTION_ID AND s.STUDENT_ID = w.STUDENT_ID
AND s.SECTION_ID = 90 AND s.GRADE_TYPE_CODE = 'FI'
GROUP BY w.LAST_NAME,s.NUMERIC_GRADE))
ORDER BY n.LAST_NAME;
I want to get numberic_grade 91 and 92 because it is above average. Why is it giving me no rows when I am trying to select those who have above average on the final exam ?
There are several problems with your query:
AVG
in the first GROUP BY
query as well GRADE
table Try a query with these corrections:
SELECT n.LAST_NAME , AVG(m.NUMERIC_GRADE)
FROM GRADE g
JOIN STUDENT s ON g.STUDENT_ID = s.STUDENT_ID -- Use ANSI joins
WHERE g.SECTION_ID = 90 AND g.GRADE_TYPE_CODE = 'FI'
GROUP BY s.LAST_NAME
HAVING AVG(g.NUMERIC_GRADE) >
(SELECT AVG(NUMERIC_GRADE)
FROM (
SELECT AVG(g.NUMERIC_GRADE) AS NUMERIC_GRADE
FROM GRADE g
JOIN STUDENT s ON s.STUDENT_ID = g.STUDENT_ID
WHERE g.SECTION_ID = 90 AND g.GRADE_TYPE_CODE = 'FI'
GROUP BY s.LAST_NAME
)
)
ORDER BY s.LAST_NAME;
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.