【问题标题】:Grouping fields by category and arranging by date, and calculating from another table按类别分组字段并按日期排列,并从另一个表计算
【发布时间】:2026-01-25 18:40:01
【问题描述】:

我有一个产品表,其中包含字段产品、类别和成本,类型为 varchar、varchar 和小数。

然后我有一个销售表,其中包含字段 client、productname、quantity、cost 和 saledate,类型为 varchar、varchar、int、decimal 和 date。

我还有一个采购表,其中包含日期、十进制、varchar 和 varchar 类型的字段 purchaseate、cost、quantity 和 purchase。

在我的销售表中,给定记录的成本字段会自动乘以数量。

例如,如果啤酒成本为 10,并且在啤酒销售量的记录中为 2,则该记录的成本将自动为 20。

我想要做的是返回所有销售和购买自动分组的结果。

例如,如果我在sales表中有以下数据:

productname - quantity - cost- saledate

beer          2          20    2010-07-10
beer          3          50    2010-07-11

And in the purchases table:

purchasedate - cost - quantity - purchase
2010-07-09     20     2          straws

我想显示以下输出

当月总销售额:

productname - quantity - cost

beer          5          50

当月总购买量

purchasedate - cost - quantity - purchase
2010-07-09     20     2          straws

我正在尝试类似以下的方法:

Select category,SUM(Sales.Quantity),SUM(Sales.Quantity*cost) cost from 
sales,products WHERE sales.product=products.name 
AND category='food' AND month(date_field) = month(getdate()) group by category

但是,这首先不起作用,其次我认为它第二次将销售表中的成本字段相乘,使其不准确。

为了满足我的需要,我是否必须将产品表中的原始成本包括在内?

我可以在一个查询中做我想做的事吗,也许作为一个联合,按照我的例子返回相应的行和列?

【问题讨论】:

    标签: sql database mysql


    【解决方案1】:

    如果我猜对了,那应该是

    当月总销售额:

    SELECT s.productname, SUM(s.quantity), SUM(s.cost)
    FROM sales AS s
    LEFT JOIN products AS p ON s.productname  = p.name 
    WHERE MONTH(s.saledate) = MONTH(NOW()) AND p.category = 'food'
    GROUP BY s.productname
    

    但我没有看到与购买表的连接

    【讨论】:

    • 啊,我认为必须有与 products 表的连接。 products 表和 sales 表通过 productname 字段关联(远非理想,我知道),我只想显示 products 表中特定类别的特定销售额。
    • 我刚刚编辑了上面的查询。现在产品表已加入。
    最近更新 更多