您的查询不包含指定的表达式,如何解决?

时间:2014-12-19 15:50:42

标签: sql ms-access

我不明白为什么我的sql没有运行, 它弹出一个窗口说

  

"您的查询不包含指定的表达式' SUM(SaleRecord.Number)*(product.Price'作为聚合函数的一部分"

SELECT SUM(SaleRecord.Number)*(Product.Price) AS TotalIncome
FROM Product, SaleRecord
WHERE Product.ProductID=SaleRecord.SaleProduct;

5 个答案:

答案 0 :(得分:2)

Product.Price不属于汇总。据推测,你打算:

SELECT SUM(SaleRecord.Number * Product.Price) AS TotalIncome
FROM Product INNER JOIN
     SaleRecord
     ON Product.ProductID=SaleRecord.SaleProduct;

请注意,我还修复了古老的join语法。

答案 1 :(得分:0)

您的括号错误 - 对于您要将price乘以number的每一行,然后只有sum它们:

SELECT SUM(SaleRecord.Number * Product.Price) AS TotalIncome
FROM   Product, SaleRecord
WHERE  Product.ProductID = SaleRecord.SaleProduct;

答案 2 :(得分:0)

您有一个括号错误:

SELECT SUM(SaleRecord.Number * Product.Price) AS TotalIncome
FROM Product INNER JOIN
    SaleRecord ON Product.ProductID = SaleRecord.SaleProduct;

答案 3 :(得分:0)

这是因为您没有指明要分组的列。你写的这行是:

SUM(SaleRecord.Number) * Product.Price

将所有销售数量(无论产品ID的差异)加起来并将其与价格相乘?那么,如果您有多个价格不同的产品呢?基本上,您正在进行一对多匹配,其中您的总数是所有销售额的总和,乘以多个价格。你需要的是按命令分组。我会修改你的代码说:

SELECT Product.ProductID, SUM(SaleRecord.Number)*Product.Price AS TotalSales
FROM Product, SaleRecord
WHERE product.Productid = SaleRecord.SaleProduct
GROUP BY Product.ProductID

这应该照顾它,告诉dbms将每个产品组合在一起,将销售数量相加,然后乘以该产品的价格。

您可以将其嵌套在另一个查询中以获得总收入:

SELECT SUM(TotalIncome)
FROM ( **the above code here)

编辑:或者您可以像上面列出的方式那样执行查询为每个 ORDER 创建TotalIncome,然后将它们汇总在一起。我的方式为每个 PRODUCT 创建一个总销售额,然后汇总所有产品

答案 4 :(得分:0)

你在我之前的回答中问道:

  

"谢谢,我只是犯了一些错误,现在它正在运作。抱歉   打扰你,我想选择销售最多的产品,   我怎么能这样做,我尝试在其上添加MAX(xxx),它不能工作"

现在,我绝不是专家,但有两个过程正在进行中。您的语言令人困惑,因此我假设您想知道哪些产品以$$格式销售最多(而非计数。例如,您可能会销售1,000美元的0.50美元产品,总计500美元的总销售额,或10美元500美元的产品,总共$ 5000。如果你想要计数或美元值,那么方法稍有变化)。

因此,第一个过程是获得每个产品的总销售额,我在上面概述了这一点。然后,您希望将其嵌套在第二个查询中,然后在其中选择最大值。我会给你代码,然后解释一下:

SELECT ProductID, MAX(TotalSale)
FROM (
      SELECT P.ProductID, SUM(S.Number)*P.Price AS TotalSale
      FROM Products as P, SaleRecords as S
      WHERE product.Productid = SaleRecord.SaleProduct
      GROUP BY Product.ProductID
      )

最容易想象这是查询查询。您的第一个查询位于FROM()语句中。这将运行并为您提供每个产品的总销售额的输出。然后运行第二个查询(最顶部的SELECT行),选择productID和所有产品中最大的销售额。

您的老师可能不喜欢这样,因为嵌套查询有点高级(虽然完全直观的IMO)。希望这有帮助!