調用彙總函式的錯誤用法

來源:互聯網
上載者:User

 

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

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.