【问题标题】:I need to use COUNT in Access SQL, and calculate average price我需要在 Access SQL 中使用 COUNT,并计算平均价格
【发布时间】:2013-10-29 08:49:42
【问题描述】:

我有两张桌子:

产品项目 - PRODUCT_ID - ITEM_ID - PRODUCT_DESC - STORE_ID - VENDOR_CODE - PRODUCT_ID - ITEM_PRICE

PRODUCT 表用于列出商店销售的每种产品的详细信息,ITEM 表本质上是每个故事的库存,列出每个商店中的产品及其价格。

我想要一个函数,它返回产品描述、商品数量 (COUNT) 以及同一产品类型的所有商品的平均价格。但是,我还想要条件是输出中只列出超过 10 个项目的产品。

这是我目前所拥有的:

SELECT PRODUCT.PRODUCT_DESC AS Description,
       COUNT(ITEM.ITEM_ID) AS Count,
       AVG(ITEM.ITEM_PRICE) AS [Average Price]
FROM PRODUCT, ITEM
WHERE PRODUCT.PRODUCT_ID = ITEM.PRODUCT_ID
AND COUNT(ITEM.ITEM_ID) > 10;

我正在使用 Access SQL,如有任何帮助,我将不胜感激!

【问题讨论】:

  • 最后一次编辑,我想你想做PRODUCT.PRODUCT_ID = ITEM.PRODUCT_ID。对吗?

标签: sql count average


【解决方案1】:

尝试使用 INNER JOIN 代替过时的多个不带连接的表,例如:

SELECT PRODUCT.PRODUCT_DESC AS Description,
COUNT(*) AS CountItems,
AVG(ITEM.ITEM_PRICE) AS [Average Price]
FROM ITEM
INNER JOIN PRODUCT
ON ITEM.PRODUCT_ID = PRODUCT.PRODUCT_ID
GROUP BY PRODUCT.PRODUCT_DESC
HAVING COUNT(*) > 10

【讨论】:

    【解决方案2】:

    每当您使用聚合函数(如COUNTAVG)时,您必须GROUP BY 非聚合列,并且要验证COUNT,请使用HAVING COUNT。你应该这样做(未经测试):

    SELECT PRODUCT.PRODUCT_DESC AS Description,
           COUNT(ITEM.ITEM_ID) AS Count,
           AVG(ITEM.ITEM_PRICE) AS [Average Price]
    FROM PRODUCT, ITEM
    WHERE PRODUCT.PRODUCT_ID = ITEM.PRODUCT_ID
    GROUP BY PRODUCT.PRODUCT_DESC
    HAVING COUNT(ITEM.ITEM_ID) > 10
    

    【讨论】:

    • have 子句产生语法错误,但其他一切正常。如果我把它拿出来,它会正确返回所有东西,除了它会返回所有产品,而不仅仅是那些超过十个项目的产品。
    • 没关系,当您切换 HAVING 和 GROUP BY 子句时它会起作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-09
    • 2020-05-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多