【问题标题】:How to find the overall Avg grade without adding a new column如何在不添加新列的情况下找到总体平均成绩
【发布时间】:2014-10-10 12:47:00
【问题描述】:

我已尝试在此处搜索答案,但到目前为止它一直是失败的原因。 我是第一个 SQL 课程的学生。

这是问题。

提供按字母顺序排列的总体平均成绩学生名单(学生证和姓名) 即 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: not a single-group group function。

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

【问题讨论】:

  • 如果遇到 ORA 错误,请先搜索原因再询问。 ora-error.com这是一个很好的起点。

标签: sql oracle


【解决方案1】:

您应该在调用 HAVING 或任何聚合函数之前使用 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 的调用,例如 AVG(Numeric_Grade) as AverageGrade。您可能还需要在 GROUP BY 子句中添加更多列,以便能够在 SELECT 子句中访问它们。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-25
    相关资源
    最近更新 更多