我试图通过以下查询获得总购买产品,总销售产品和总售价
SELECT products.name, products.code,
COALESCE( sum( purchase_items.quantity ) , 0 ) AS purchased,
COALESCE( sum( sale_items.quantity ) , 0 ) AS sold,
COALESCE(sum(sale_items.gross_total), 0) as sold_price
FROM ( `products` )
LEFT JOIN `purchase_items` ON `purchase_items`.`product_id` = `products`.`id`
LEFT JOIN `sale_items` ON `sale_items`.`product_id` = `products`.`id`
LEFT JOIN `sales` ON `sale_items`.`sale_id` = `sales`.`id`
LEFT JOIN `purchases` ON `purchase_items`.`purchase_id` = `purchases`.`id`
GROUP BY `products`.`id`
ORDER BY `purchased` DESC
LIMIT 10
表格数据:
NAME CODE PURCHASED SOLD SOLD_PRICE
test product 3 test3 4 4 1600
test product 2 test2 4 4 2000
test product 1 test1 4 4 1200
我得到了这个:
test product 1 test1 4 4 1200
test product 3 test3 4 4 1600
test product 2 test2 4 4 2000
这是正确的结果:
test product 1 test1 2 2 400
test product 3 test3 2 2 1200
test product 2 test2 2 2 800
答案 0 :(得分:1)
我得到了另一个正确的结果?
为了清楚说明,sqlfiddle显示结果:)
http://sqlfiddle.com/#!2/44e19/38
test product 1 test1 2 2 600
test product 3 test3 2 2 1000
test product 2 test2 2 2 800
答案 1 :(得分:1)
虽然您的发布成本/价格/数量似乎与您的sql小提琴创建(可能是复制/粘贴)相匹配,但我正在尝试了解您想要的内容。处理过库存系统(并在过去定制)后,您正在尝试根据成本与实际销售情况找出最受欢迎的产品和/或最有利可图的产品。
要解决此问题,您需要查看您的商品销售成本(所有实际购买商品的总和)。然后类似地,出售什么。你可能拥有100个产品,其中一些产品从未移动过,其他产品则经常进入库存。这些实际销售额是另一半。虽然此查询不涉及LIFO / FIFO会计方法的库存和批次成本分配,但它可能更接近您所寻找的。 p>
查询从产品表开始,然后左连接到刚购买的总和,左连接到实际销售的总和。我已经根据你的需要从每一组中获取了相应的总数。
此外,我已经计算出GROSS PROFIT作为单个产品的最终成本基础(同样,不是LIFO或FIFO方法),并且从总实际销售额中说,减去了最后已知数量的TIMES数量。产品表中的成本。这使得毛利仅基于实际销售的那些。
SELECT
p.id,
p.code,
p.name,
COALESCE( PCosts.totalQty, 0 ) as PurchasedQty,
COALESCE( PCosts.totalDollar, 0 ) as PurchasedCosts,
COALESCE( PSales.totalQty, 0 ) as SoldQty,
COALESCE( PSales.totalDollar, 0 ) as TotalSales,
COALESCE( PSales.totalDollar, 0 ) - ( COALESCE( PSales.totalQty, 0 ) * p.Cost ) as GrossProfit
from
products p
left join ( SELECT
pi.product_id,
SUM( pi.quantity ) totalQty,
SUM( pi.gross_total ) totalDollar
from
purchase_items pi
group by
pi.product_id ) PCosts
ON p.id = PCosts.product_ID
left join ( SELECT
si.product_id,
SUM( si.quantity ) as totalQty,
SUM( si.gross_total ) as totalDollar
from
sale_items si
group by
si.product_id ) PSales
ON p.id = PSales.product_id