2011-09-19 143 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中工作。