0

我在 SQLPLUS 中的一个查询有问题。

我被要求显示满足以下限制的所有供应商的 SuppCode、SuppName 和 PostCode: 他们提供的每个库存商品的价格都高于所有库存商品的平均价格。

我正在使用的三张表是;供应商、库存和 SupplyItems。

供应商表如下所示:

SUPPCODE SUPPNAME STREET TOWN COUNTRY POSTCODE TELNO FAXNO

有 8 个单独的样本数据(8 个供应商),并且没有空字段。

股票表如下所示:

ITEMNO STORECODE ITEMDESC QUANTITY UNITS REORDER PRICE SUPPCODE

有 40 个单独的样本数据(40 个库存项目),并且没有空字段。

SupplyItems 表如下所示:

SUPPCODE CATNO STOCKNO PRICE

有 60 个单独的样本数据(60 个供应项目),并且没有空字段。

我写了以下查询:

select distinct SU.SuppCode, Su.SuppName, PostCode
from Suppliers SU
LEFT JOIN SupplyItems SI ON SU.SuppCode = SI.SuppCode
where Price >
(select AVG(Quantity) from Stocks ST
where SI.StockNo = ST.StockNo);

我得到以下输出(4个值):

SUPPCODE SUPPNAME POSTCODE
S6       BSS LTD. B10 8SS
S2       ITX LTD. IT5 3TX
S3       FFG LTD. FY9 6FG
S4       OMM LTD. OM5 4MM

现在,我已经知道输出应该包含 2 或 3 条记录,所以我的查询是错误的,尽管我不明白为什么。

任何帮助,将不胜感激。

4

1 回答 1

1

这个:

where Price >
(select AVG(Quantity) from Stocks ST

看起来不对——不应该是这样吗

AVG(price)

?

编辑:还有,

select distinct SU.SuppCode, Su.SuppName, PostCode
from Suppliers SU
LEFT JOIN SupplyItems SI ON SU.SuppCode = SI.SuppCode
where Price > ...

可能不符合您的要求 - 这将返回所有提供至少一件价格高于平均水平的商品的供应商;要获得提供价格高于平均水平的商品的供应商,您必须使用不同的方法,例如(未经测试)

select distinct SU.SuppCode, Su.SuppName, PostCode
from Suppliers SU
where not exists (
  select null from SupplyItems si 
  where su.SuppCode = si.SuppCode
  and su.price <= (
      select AVG(price) from Stocks ST
      where SI.StockNo = ST.StockNo)
)
于 2012-11-29T08:25:19.670 回答