创建一个计算总成本的更新查询?
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用于计算层次结构中每个组件的总成本百分比