Mysql 使用不同的价格计算采购成本
假设你有一家商店和一只股票。您以不同的价格购买产品,并希望计算每次销售的成本。问题是,购买价格不是固定的,您可能会进行销售,其中您销售的商品来自不同的购买,购买价格是混合的。成本的计算应该遵循“先进先出”的原则:你首先要出售库存中最旧的商品 例如,这可能会发生:Mysql 使用不同的价格计算采购成本,mysql,Mysql,假设你有一家商店和一只股票。您以不同的价格购买产品,并希望计算每次销售的成本。问题是,购买价格不是固定的,您可能会进行销售,其中您销售的商品来自不同的购买,购买价格是混合的。成本的计算应该遵循“先进先出”的原则:你首先要出售库存中最旧的商品 例如,这可能会发生: 2018-10-01:您将以每件10美元的价格购买6件“产品1”,并将其放入您的库存中 2018-10-04:一位客户想要两件“产品1”。你将进入你的股票,卖出2件物品,每件10美元 2018-11-01:您将以每件8美元的价格购买8
- 2018-10-01:您将以每件10美元的价格购买6件“产品1”,并将其放入您的库存中
- 2018-10-04:一位客户想要两件“产品1”。你将进入你的股票,卖出2件物品,每件10美元
- 2018-11-01:您将以每件8美元的价格购买8件“产品1”,并将其放入您的库存中
- 2018-11-06:一位客户想要7项“产品1”。你将进入你的股票,卖出4件你花10美元买的东西和3件你花8美元买的东西
- 2018-12-01:您以每件12.00美元的价格购买了4件“产品1”
- 2018-12-10:一位客户想要6项“产品1”。你将进入你的股票,卖出5件你花8.00美元买的东西和1件你花12.00美元买的东西
purchase | product | amount | purchase price per item| date |
1 1 6 10.00 2018-10-01
2 1 8 8.00 2018-11-01
3 1 4 12.00 2018-12-01
表:销售额
sale | product | amount | date | costs
1 1 2 2018-10-04 ??
2 1 7 2018-11-06 ??
3 1 6 2018-12-10 ??
sales.costs中的值应为:
Sale 1: 2*10.00 = 20.00
Sale 2: 4*10.00 + 3*8.00 = 64.00
Sale 3: 5*8.00 + 1*12.00 = 52.00
在MySql 5.6中使用UPDATE语句计算是否/如何可能?我必须承认,我甚至不知道如何从这里开始或尝试什么。首先,我添加了一个名为
stock
的新表。在这张桌子里,我储存着每一笔存货的变动。看起来是这样的:
purchase | sold | date |
1 | 2 | 2018-10-04 |
1 | 4 | 2018-11-06 |
2 | 3 | 2018-11-06 |
2 | 5 | 2018-12-10 |
3 | 1 | 2018-12-10 |
如果需要,您可以使用触发器填写此表,也可以手动填写。
现在我使用这个脚本:
SET @toSell:=5;
SELECT s.stock, p.price, LEAST( s.stock, @toSell ) AS toSell , @toSell * p.price AS totalPrice, @toSell := @toSell - LEAST( s.stock, @toSell ) AS stillNeeded
FROM (
SELECT p.purchase, SUM( s.sold ) AS 'sold', p.amount, IFNULL( p.amount - SUM( s.sold ) , p.amount ) AS 'stock'
FROM purchases AS p
LEFT OUTER JOIN stock AS s ON p.purchase = s.purchase
GROUP BY p.purchase
ORDER BY p.date
) AS s
RIGHT OUTER JOIN purchases AS p ON s.purchase = p.purchase
WHERE s.stock >0 AND LEAST( s.stock, @toSell ) > 0;
计算每次销售的成本。在开始时,我定义了一个变量,其中包含要销售的商品数量。此变量将在每一行中进行操作。内部选择
是一个左外部联接
,用于获取按日期订购的每次采购的库存中的项目数量,以便首先使用最旧的项目(FIFO)
第二个选择
立即使用库存项目,并逐行减少变量,直到不再需要更多项目。您只需对totalPrice
列进行SUM
即可获得成本
为了测试脚本,我添加了一个新行/purchase
purchase | product | amount | purchase price per item| date |
4 | 1 | 10 | 5 | 2019-02-04 |
当您使用SET@toSell:=2运行此脚本时,结果如下所示:
stock | price | toSell | totalPrice | stillNeeded |
3 | 12 | 2 | 24 | 0 |
并且设置@toSell:=5
stock | price | toSell | totalPrice | stillNeeded |
3 | 12 | 3 | 60 | 2 |
10 | 5 | 2 | 10 | 0 |
希望有帮助:)计算必须在纯MySQL中完成吗?没有PHP,C++,JavaScript等等?哇,非常感谢!我需要一些时间来测试一下,然后再给你回复。