SQL计算总价

新手上路,请多包涵

这里是新的(加上对糟糕的英语感到抱歉..),我在这里有两个表有一些 SQL 困难 - 销售和产品:

 Product:

ProductID | Product | Price
____________________________
1         | walnuts | 16
2         | cashew  | 25
3         | peanuts | 4

Sells (each product kilograms sold):

Day | walnuts | cashew | hazelnut
__________________________________
1   | 2       | 3      | 1
2   | 8       | 6      | 25
3   | 1       | 3      | 12

我要显示的是第 2 天(例如)赚取的总金额,那么我该如何计算呢?

原文由 Svetoslav Nedelchev 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 928
2 个回答

你设计桌子的方式不好。

 **Item table:**

    product_id | product_name | price
    __________________________________
    1          | Some1        | 20
    2          | Some2        | 30
    3          | Some3        | 40

    **sale table :**

    sale_id  |  product_id | quantity
    __________________________________
    1        | 2           | 2
    2        | 1           | 1
    3        | 3           | 2

现在应用查询:

 SELECT sale.quantity*item.price as TOTAL FROM item,sale WHERE item.product_id=sale.product_id;

如果您有更多列,则可以应用更多过滤器。

原文由 Biswajit Nath 发布,翻译遵循 CC BY-SA 3.0 许可协议

1.改变你的表结构

你的数据库表结构不好。使用产品品种作为列是不可行的。而是使用以下结构:

 Product:

ProductID | Product | Price
____________________________
1         | walnuts | 16
2         | cashew  | 25
3         | peanuts | 4

Sells (each product kilograms sold):

Day | ProductID | Amt    | Price
__________________________________
1   | 1         | 2      | 15
1   | 2         | 3      | 25
1   | 3         | 1      | 4
2   | 1         | 8      | 16
2   | 2         | 6      | 23
2   | 3         | 25     | 5
3   | 1         | 1      | 16
3   | 2         | 3      | 25
3   | 3         | 12     | 4

我将价格列放在 Sells 表中,因为实际销售价格每天可能会有所不同。

一旦表格在这个结构中,你可以做分组来总结。以下是 MySQL 查询:

 SELECT SUM(Amt * Price) AS total FROM Sells WHERE Day=2 GROUP BY Day

如果您想查看每天和产品本身的详细信息,您可以尝试以下操作:

 SELECT p.ProductID, p.Product, SUM(s.Amt * s.Price) AS total
    FROM Sells AS s
    LEFT JOIN Product AS p ON s.ProductID = p.ProductID
WHERE s.Day=2 GROUP BY s.Day, s.Product

2.如果无法改变,那么…

@Kanagaraj Dhanapal 的答案将是你的。

原文由 Codemole 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进