有三张table要拼我,
1.产品:ID
- product_purchase:product_id,purchase_id,数量,小计
- product_warehouse:product_id,purchase_id,quantity
这里的产品有多个数据透视表,如product_purchase、product_warehouse。我想对每个产品id执行一个sum查询。我写的查询是,
Product::select('products.id', 'products.code')
->selectRaw('sum(product_warehouse.quantity) as remaining_quantity')
->leftjoin('product_warehouse', 'product_warehouse.product_id', '=', 'products.id')
->leftjoin('product_purchase', 'product_purchase.product_id', '=', 'products.id')
->groupBy( 'products.id' )
->fromCompany()
->get();
结果就是
[
{
id: 7,
code: "part1",
remaining_quantity: "8.000000000000000000"
},
{
id: 8,
code: "part2",
remaining_quantity: "6.000000000000000000"
},
{
id: 9,
code: "part-full",
remaining_quantity: "0.000000000000000000"
}
]
剩余数量总和执行错误。我正在寻求帮助,我写的查询哪里出错了。期待您的回答和评论。
1条答案
按热度按时间2izufjch1#
您应该计算的数量总和从仓库的每一个产品之前,它是受影响的加入与采购。然后,还要计算每个产品的购买数量之和,以便不受仓库联接的影响。最后,将这两个表左连接到products表,以获得组合视图。
这将为您提供product_warehouse和product_purchase表中每个product_id的数量之和,而不会在通过单个查询连接所有表时受到行乘法的干扰。因此,remaining_quantity的计算方法是从合计warehouse_quantity中减去合计purchase_quantity。
注意,COALESCE用于处理product_warehouse或product_purchase表中没有给定product_id的记录的情况。