我试着在这里寻找答案,但到目前为止它已经失败了。 我是第一个SQL课程的学生。
这是一个问题。
提供具有总体平均成绩的学生的字母列表(学生ID和姓名) 这是一个C或更低(小于80)。 名称应该是一列,姓氏首先,并按姓氏和名字排序。
这是我的代码。
SELECT GRADE.STUDENT_ID,Last_Name || ', '||First_Name AS Student_Name
FROM GRADE,Student
WHERE Student.STUDENT_ID = GRADE.STUDENT_ID
HAVING AVG(Numeric_Grade) <= 80
ORDER BY Last_Name,First_Name;
我使用HAVING子句收到此错误消息:ORA-00937:不是单组组功能。
我不确定如何获得平均等级...任何帮助将不胜感激 提前谢谢
答案 0 :(得分:0)
在调用HAVING或任何agregate函数之前,您应该使用GROUP BY子句
示例:
SELECT GRADE.STUDENT_ID,Last_Name || ', '||First_Name AS Student_Name
FROM GRADE,Student
WHERE Student.STUDENT_ID = GRADE.STUDENT_ID
--Important
GROUP BY Student.STUDENT_ID
HAVING AVG(Numeric_Grade) <= 80
ORDER BY Last_Name,First_Name;
然后,您可以在SELECT子句中为例外AVG(Numeric_Grade) as AverageGrade
添加对AVG的调用。您可能还需要在GROUP BY子句中添加更多列,以便能够在SELECT子句中访问它们。