调用聚合函数的错误用法

前端之家收集整理的这篇文章主要介绍了调用聚合函数的错误用法前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

@H_502_2@如果查询中包含一个聚合函数,而所选择的列并不在聚合函数中,那么这些列就必须在GROUP BY@H_502_2@子句中;否则就会出现下面的错误ORA-00937: not a single-group group function@H_502_2@。例如,下面这个查询选择product_type_id@H_502_2@列和AVG(price)@H_502_2@,但是却没有使用一个包含product_type_id@H_502_2@的GROUP BY@H_502_2@子句:

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

@H_502_2@之所以会出现这个错误是因为数据库不知道怎样在结果集中处理product_type_id@H_502_2@列。考虑一下:这个查询既试图使用AVG@H_502_2@聚合函数对多行记录进行操作,却又试图从每行中获得product_type_id@H_502_2@列的值;这两个操作是不可能同时完成的。此时必须提供一个GROUP BY@H_502_2@子句告诉数据库product_type_id@H_502_2@列相同的行分组在一起,然后数据库就可以将这些组中的行传递给AVG@H_502_2@函数

@H_502_2@警告:

@H_502_2@如果查询中包含聚合函数,而所选择的列并不在聚合函数中,那么这些列就必须在GROUP BY@H_502_2@子句中。

@H_502_2@还有,不能在WHERE@H_502_2@子句中使用聚合函数来限制行。如果这样做,就会出现下面的错误ORA-00934: group function is not allowed here@H_502_2@。例如:

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

@H_502_2@之所以会出现这个错误是因为WHERE@H_502_2@子句只能用来对单行而不是行组进行过滤。要过滤行组,可以使用HAVING@H_502_2@子句。

猜你在找的设计模式相关文章