具有平均聚合问题的子查询

时间:2016-04-07 17:58:00

标签: sql sql-server aggregate-functions

我必须使用子查询来找出哪些商品以高于平均价格的价格出售,但最后我一直收到错误而且我一直盯着它看得太久我知道我很接近我能得到一个向正确方向颠簸。 有人知道什么事可以吗?

我目前有这个:

select oi.OrderID
     , ItemID
     , oi.price
from ORDERS o join ORDER_ITEM oi
     on o.OrderID = oi.OrderID
where oi.price >
 (select avg(oi.price) from ORDER_ITEM)

1 个答案:

答案 0 :(得分:1)

您在聚合中有外部引用。对子查询使用不同的表别名:

select oi.OrderID, ItemID, oi.price
from ORDERS o join
     ORDER_ITEM oi
     on o.OrderID = oi.OrderID
where oi.price > (select avg(oi2.price) from ORDER_ITEM oi2);
-----------------------------^

您的版本取自外部引用的price的平均值。一些数据库(特别是SQL Server,但也许是其他数据库)不允许这样做。

我还应该注意到连接似乎是多余的:

select oi.OrderID, oi.ItemID, oi.price
from ORDER_ITEM oi
where oi.price > (select avg(oi2.price) from ORDER_ITEM oi2);