2011-09-19 146 views
2

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

表:

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子句,我会用需要重复该功能。任何帮助?

+1

您正在使用哪些DBMS? –

回答

5

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

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

大概需要GROUP BY ID, class

4

你不能有avg(Grade)GROUP BY下。

在你的例子中,你必须有:GROUP BY ID, class

0

在标准SQL,从SELECT子句仅AS条款(“列别名”),允许在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中工作。