laravel - Laravel sum 数量和按 product_id 分组并返回表数据
问题描述
表数据:
id || product_id || quantity || sold_price || image (Relationship)
1 || 1 || 10 || 10 || 1.png
2 || 2 || 5 || 20 || 2.png
3 || 1 || 15 || 15 || 1.png
预期回报数据
重复product_id
的25
和平均售价的sold_price
总和10+15/2 = 2
为了获得平均水平,我们得到sum/counter
你已经知道的。
预期结果
id || product_id || quantity || sold_price || image (Relationship)
1 || 1 || 25 || 12.5 || 1.png
2 || 2 || 5 || 20 || 2.png
我试过的
$products = SoldProducts::whereIn('export_invoice_id', $export_invoice_ids)
->groupBy(DB::raw('product_id'))
->select([
'sold_price',
DB::raw('sum(quantity) total_quantity'),
])
-> get();
但是这个回报只有total_quantity
和product_id
没有id, average_sold_price, image
。
问题
问题是image
来自关系。
我尝试使用with('image')
,但选择不起作用。
解决方案
如果我正确理解了这个问题,那么以下代码应该可以纠正您的问题。
$products = SoldProducts::whereIn('export_invoice_id', $export_invoice_ids)
->groupBy('product_id')
->join('images', 'product.image_id', '=', 'images.id')
->select([
'products.id',
'products.product_id',
DB::raw('sum(products.quantity) AS quantity'),
DB::raw('(sum(products.sold_price) / count(*)) AS sold_price'),
'images.image'
])
->get();
如果您使用 select,则需要在 select 中选择您需要的每一列以便 Eloquent 检索它,否则它不会为您提取该列。
您需要两个 DB::raw 在您的选择中 - 根据您的规格,一个用于数量,一个用于售价;数量是一个简单的总和。它总结了每个产品 ID 的所有项目。售出的价格先相加,然后除以该 product_id 的数量。
编辑:我已经更新了代码示例 - 但由于您没有指定图像如何连接到表格中,所以我进行了有根据的猜测。如果您并不总是分配图像,则可能需要将其设置为 ->leftJoin。
推荐阅读
- conemu - 在我运行某些东西后,ConEmu 的历史消失了
- hibernate - 关于方言的休眠异常
- raspberry-pi - 在哪里可以看到 scratch2.0 扩展的 console.log() 输出?
- c# - 为什么 C# 不抛出异步函数的本地函数内部发生的异常?
- c# - Blazor + RPC 解决方法
- c# - 在 xamarin 表单中的滚动视图内时出现 Listview 滚动问题
- excel - Excel 2007 Transpot - 与 if 语句合并
- java - SOAPUI 使用axis2生成代码
- sql - WHERE 子句中的 CASE - 传递多个值
- jsf - 点击滚动条后 Primefaces 自动完成关闭