创建一个计算总成本的更新查询?

Posted

技术标签:

【中文标题】创建一个计算总成本的更新查询?【英文标题】:Create an update query which calculates total cost? 【发布时间】:2019-08-28 18:55:31 【问题描述】:

所以客户购买产品。一些客户签订了个别产品的合同,并支付较低的单位成本。我试图创建一个更新查询,通过将购买的单位乘以股票价格或合同价格来计算总成本。我正在使用 phpmyadmin。我已经坚持了很长时间,任何帮助将不胜感激。

基本上,我想根据我的 order_details 表中的详细信息更新我的订单表中的总成本。我已经使用 CASE 来决定是将单位乘以合同价格还是股票价格。

当我运行下面的查询时,我没有收到任何错误,但它不会影响我表中的任何行

    UPDATE orders 
    INNER JOIN order_details ON orders.`Order No` = order_details.OrderId 
    INNER JOIN contracts ON order_details.contractId = contracts.`Contract ID` 
    INNER JOIN stock ON contracts.`Product Code` = stock.`Product code` 
    SET orders.`total cost` = (CASE WHEN order_details.contractId = 
    contracts.`Contract ID` THEN order_details.Unitspurchased * 
    contracts.`Contract Price` ELSE order_details.Unitspurchased * stock.`Sale 
    price` END ) 
    WHERE order_details.OrderID = orders.`Order No``

【问题讨论】:

如果没有看到一些数据或错误消息,可能很难有人在这里为您提供帮助。 是不是应该在读取数据时计算订单的总成本,而不是与数据一起存储?似乎试图在多个地方存储相同的信息。 【参考方案1】:

首先,您需要某种聚合。

其次,我不明白这些列的真正位置。例如,我希望order_details 有一个产品代码。

我希望这样的查询:

UPDATE orders o
       (SELECT od.order_id,
               SUM(od.Unitspurchased * COALESCE(c.`Contract Price`, s.`Sale price`)) as total_price
        FROM order_details od JOIN
             stock s
             ON od.`Product Code` = s.`Product code` LEFT JOIN
             contracts c
             ON od.contractId = c.`Contract ID` 
        GROUP BY od.order_id
       ) od
    SET o.`total cost` = od.total_cost ;

为了加入合同,您可能还需要:

ON od.contractId = c.`Contract ID` AND
   od.`Product Code` = c.`Product Code`

如果产品在合同表中。

我还建议您修复列名。有空格意味着您需要对名称进行转义,这只会使查询更难编写和阅读。

【讨论】:

以上是关于创建一个计算总成本的更新查询?的主要内容,如果未能解决你的问题,请参考以下文章

cypher query用于计算层次结构中每个组件的总成本百分比

创建计算每个新插入员工的总工资的行级触发器

访问使用计算字段中的SubQuery查找上一个记录

降低流分析集群的成本

可用于计算 BigQuery 查询成本的 Python API 是啥?

SAP如何计算实际成本