从MySQL查询中获取错误结果
我正试图通过以下查询获取总购买产品、总销售产品和总销售价格从MySQL查询中获取错误结果,mysql,sql,Mysql,Sql,我正试图通过以下查询获取总购买产品、总销售产品和总销售价格 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 ( `produ
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
我得到了另一个正确的结果 为了清楚起见,sqlfiddle显示了结果:
虽然您发布的成本/价格/计数与您的sql FIDLE create(可能是复制/粘贴)中的成本/价格/计数不匹配,但我正在尝试了解您想要什么。在过去处理过库存系统和定制后,您试图根据成本和实际销售额找出最受欢迎的产品和/或最有利可图的产品 要解决这个问题,您需要查看您的销售商品成本,以及您为开展业务而花费的所有实际采购项目的总和。同样地,出售的是什么。你可能有100种产品,其中一些永远不会移动,另一些则会大量检查库存。这些实际销售额是另一半。虽然此查询不涉及库存和批次成本分配的后进先出会计方法,但它可能更接近您所寻找的 查询从products表开始,然后左连接到刚购买的总和,左连接到实际销售的总和。我已经从每套中抓取了相应的总数,以便根据您的需要进行处理 此外,我再次计算了毛利作为单个产品的最终成本基础,而不是后进先出法或先进先出法,并表示从实际销售总额中减去产品表中最后已知成本的多少倍。这就给出了仅基于实际销售的毛利润
什么子查询?我看到的只是一些连接。请告诉我们你得到了什么,你期望什么。我已经更新了问题。谢谢您想要获得sumsale_items.gross_total-产品1:400。但是SQLFiddle中的sale_items表包含产品1:2的记录,一个记录的总数为200,另一个记录的总数为400。你能解释一下为什么200+400的和等于400吗?也许我错过了什么。非常感谢你抽出时间。我已经意识到我的错误——sqlfiddle模式的总量是错误的。你能给我推荐一本关于后进先出和先进先出计算方法的书吗。谢谢again@Saleem,后进先出/先进先出应在基本会计账簿中。然而,通常会有一些指标跟踪哪些批次的采购数量,这些指标会进入非常详细的库存跟踪,与您目前拥有的没有任何接近。很抱歉,我不能提供更多关于这个论坛的内容。如果你有兴趣了解更多,以及我在这方面的会计历史,请给我发一封电子邮件。
test product 1 test1 2 2 600
test product 3 test3 2 2 1000
test product 2 test2 2 2 800
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