我有两个表:工作计划和进度。这是工作计划表。
工作计划表:
ID
部门名称
师长
进度表:
ID
得分
workplan_id foreign_key
这里workplan_id是工作计划表的外键。
现在我想从按部门名称分组的进度表中获取平均值。但我的查询真的很困惑。我做了什么:
$report = DB::table('workplans')
->join('progress','workplans.id','=','progress.workplan_id')
->avg('progress.score')
->groupBy('workplans.division_name')
->get();
dd($report);
最佳答案
你想要的 SQL 是这样的......
SELECT workplans.division_name, AVG(progress.score) as average_score
FROM `workplans`
LEFT JOIN `progress` ON progress.workplan_id = workplans.id
GROUP BY workplans.id
使用 Laravel 查询生成器...
$report = DB::table ('workplans')
->join ('progress', 'progress.workplan_id', '=', 'workplans.id')
->select ('workplans.division_name', DB::raw ('AVG(progress.score) as average_score'))
->groupBy ('workplans.id')
->get ();
因此,对于分数为 5 和 15 的分区 1、分数为 15 和 25 的分区 2,这将返回...
Array
(
[0] => stdClass Object
(
[division_name] => Division 1
[average_score] => 10
)
[1] => stdClass Object
(
[division_name] => Division 2
[average_score] => 20
)
)
查询的问题在于 avg 聚合函数返回表中所有列的平均值,而不是返回到查询的引用,以便您可以继续链接其他函数。解决这个问题的方法是使用 MySQL AVG 函数使用 DB::raw 方法手动指定平均值。
关于php - 从 Laravel 4 中的数据库获取平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22966245/