ORDER BY与HAVING子句一起使用时出错

时间:2011-09-19 23:09:14

标签: sql sql-order-by having-clause

我正在尝试使用一些基本的SQL函数。我需要获得一些数据的平均值并按降序排序。我得到的错误是“不允许组功能”

表:

STUDENTS
-----------
ID
CLASS
GRADE
ROOM

SQL:

    SELECT ID, class, AVG(Grade) AS AvgGrade
      FROM Students
     GROUP BY AVG(Grade)
    HAVING AVG(Grade) >= 3.0
     ORDER BY AVG(Grade) DESC

我被告知ORDER BY不能与HAVING子句一起使用,我需要重复该功能。有什么帮助吗?

3 个答案:

答案 0 :(得分:5)

GROUP BY avg(Grade)没有任何意义。

GROUP BY表达式定义了您希望聚合应用于的组。

大概你需要GROUP BY ID, class

答案 1 :(得分:4)

avg(Grade)下无法GROUP BY

在您的示例中,您必须拥有:GROUP BY ID, class

答案 2 :(得分:0)

在标准SQL中,AS子句中只允许SELECT子句中的ORDER BY子句(“列别名”),即

SELECT ID, class, AVG(Grade) AS AvgGrade
  FROM Students
 GROUP BY ID, class
HAVING AVG(Grade) >= 3.0
 ORDER BY AvgGrade DESC;

当然,并非所有SQL产品都忠实地实施标准,但上述内容应该适用于SQL Server。