如何在不添加新列的情况下查找整体平均成绩

时间:2014-10-10 04:39:11

标签: sql oracle

我试着在这里寻找答案,但到目前为止它已经失败了。 我是第一个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:不是单组组功能。

我不确定如何获得平均等级...任何帮助将不胜感激 提前谢谢

1 个答案:

答案 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子句中访问它们。