【问题标题】:SQLPLUS Table Query TroubleSQLPLUS 表查询问题
【发布时间】:2012-11-29 08:11:34
【问题描述】:

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

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

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

供应商表如下所示:

SUPPCODE SUPPNAME STREET TOWN COUNTRY POSTCODE TELNO FAXNO

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

Stocks 表如下所示:

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 条记录,所以我的查询是错误的,虽然我不明白为什么。

任何帮助将不胜感激。

【问题讨论】:

    标签: sqlplus


    【解决方案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)
    )
    

    【讨论】:

    • 我以前试过。你的意思是,“在哪里 AVG(Price) > (select AVG(Quantity) from Stocks ST”?...当我尝试时出现错误:“ORA-00934: Group function is not allowed here”
    • 没有。您正在将价格与数量的平均值进行比较-恕我直言,这没有意义。您应该将供应商品的价格与平均价格而不是平均数量进行比较。
    • 啊,我真傻!谢谢,虽然我现在得到 5 个值而不是 4 个值,但听起来这不是正确的答案。但我现在看到比较错误
    • 这是因为您的查询返回了至少提供一种“昂贵”商品的所有供应商 - 请参阅我的更新答案。
    • 嗯,我发现我收到“未选择记录”。我已经编写了您建议的查询的变体,但没有,“价格=”,因为“他们提供的每个库存商品的价格都高于平均价格所有库存物品。”约束?
    猜你喜欢
    • 1970-01-01
    • 2011-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-12
    相关资源
    最近更新 更多