調用聚合函數的錯誤用法

 

如果查詢中包含一個聚合函數,而所選擇的列並不在聚合函數中,那麼這些列就必須在GROUP BY子句中;否則就會出現下面的錯誤:ORA-00937: not a single-group group function。例如,下面這個查詢選擇product_type_id列和AVG(price),但是卻沒有使用一個包含product_type_idGROUP BY子句:

 SQL> SELECT product_type_id, AVG(price)
2 FROM products;
SELECT product_type_id, AVG(price)
*
ERROR at line 1:
ORA-00937: not a single-group group function

之所以會出現這個錯誤是因爲數據庫不知道怎樣在結果集中處理product_type_id列。考慮一下:這個查詢既試圖使用AVG聚合函數對多行記錄進行操作,卻又試圖從每行中獲得product_type_id列的值;這兩個操作是不可能同時完成的。此時必須提供一個GROUP BY子句告訴數據庫將product_type_id列相同的行分組在一起,然後數據庫就可以將這些組中的行傳遞給AVG函數。

警告:

如果查詢中包含聚合函數,而所選擇的列並不在聚合函數中,那麼這些列就必須在GROUP BY子句中。

還有,不能在WHERE子句中使用聚合函數來限制行。如果這樣做,就會出現下面的錯誤:ORA-00934: group function is not allowed here。例如:

 SQL> SELECT product_type_id, AVG(price)
2  FROM products
3  WHERE AVG(price) > 20
4  GROUP BY product_type_id;
WHERE AVG(price) > 20
*
ERROR at line 3:
ORA-00934: group function is not allowed here

之所以會出現這個錯誤是因爲WHERE子句只能用來對單行而不是行組進行過濾。要過濾行組,可以使用HAVING子句。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章