gpt4 book ai didi

SQL - 不包括指定的表达式作为聚合函数

转载 作者:行者123 更新时间:2023-12-04 05:08:26 25 4
gpt4 key购买 nike

我正在尝试编写一个查询,该查询将计算并列出学生 GPA,然后只显示低于所有学生平均 GPA 的那些。我已经成功地让查询输出了一个包含每个学生 GPA 的表格,但我无法让它只显示低于平均水平的那些。

以下是我当前的查询:

    SELECT SC.StudentID, S.StdLastName, GPA
FROM (SELECT SC.StudentID, S.StdLastName, ROUND(SUM(C.Credits * GV.GradeValue)/SUM(C.Credits), 2) AS GPA
FROM ((Student_Classes AS SC INNER JOIN GradeValues AS GV ON SC.Grade = GV.Grade)
INNER JOIN Students AS S ON SC.StudentID = S.StudentID)
INNER JOIN Classes as C ON SC.ClassID = C.ClassID
GROUP BY SC.StudentID, S.StdLastName)
GROUP BY SC.StudentID, S.StdLastName, GPA
HAVING GPA < AVG(GPA)
ORDER BY GPA;

当我这样做时,出现的错误是,

您尝试执行的查询不包括指定的表达式 GPA < AVG(GPA) 作为聚合函数的一部分。

我在这个网站上发现了多个类似错误的页面,但仍然无法让它工作。任何帮助将不胜感激。

最佳答案

当你说 GROUP BY SC.StudentID, S.StdLastName, GPA ,您告诉数据库使用这三列来创建数据组,然后在每个组中应用聚合函数(在本例中为 AVG )。这意味着,正如所写的,您正在尝试根据该学生的平均水平过滤每个学生的 GPA。希望每个学生的平均 GPA 等于他们的实际 GPA...

为了完成这项工作,您需要第二个子查询,您可以使用它来获得总体平均 GPA:

SELECT sc.studentid, s.stdlastname, gpa
FROM (SELECT sc.studentid,
s.stdlastname,
ROUND(SUM(c.credits * gv.gradevalue) / SUM(c.credits), 2) AS gpa
FROM ((student_classes sc
INNER JOIN gradevalues gv
ON sc.grade = gv.grade)
INNER JOIN students s
ON sc.studentid = s.studentid)
GROUP BY sc.studentid, s.stdlastname)
GROUP BY sc.studentid, s.stdlastname, gpa
WHERE gpa < (SELECT AVG(GPA) as avg_gpa
FROM (SELECT ROUND(SUM(c.credits * gv.gradevalue) / SUM(c.credits), 2) AS gpa
FROM student_classes sc
INNER JOIN gradevalues gv
ON sc.grade = gv.grade
GROUP BY sc.studentid))
ORDER BY gpa;

我不确定这是否会解决您的语法问题,但它应该可以解决您的逻辑问题。

关于SQL - 不包括指定的表达式作为聚合函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15209680/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com