Php 从laravel 4中的数据库获取平均值

Php 从laravel 4中的数据库获取平均值,php,mysql,sql,laravel-4,average,Php,Mysql,Sql,Laravel 4,Average,我有两张表格:工作计划和进度。这是工作计划表 工作计划表: 身份证 分部名称 科长 进度表: 身份证 得分 工作计划id外键 这里workplan_id是workplan表的外键 现在我想通过分区名称对进度表分组得到平均值。但我的问题真的搞砸了。我所做的是: $report = DB::table('workplans') ->join('progress','workplans.id','=','progress.workplan_id') ->avg('pro

我有两张表格:工作计划和进度。这是工作计划表

工作计划表:

身份证

分部名称

科长

进度表:

身份证

得分

工作计划id外键

这里workplan_id是workplan表的外键

现在我想通过分区名称对进度表分组得到平均值。但我的问题真的搞砸了。我所做的是:

  $report = DB::table('workplans')
    ->join('progress','workplans.id','=','progress.workplan_id')
    ->avg('progress.score')
    ->groupBy('workplans.division_name')
    ->get();

  dd($report);

我不知道如何使用Laravel的查询生成器编写,但静态MySQL查询可能更容易:

$report = DB::select("SELECT AVG(progress.score) AS 'avg' FROM workplans JOIN progress ON workplans.id=progress.activity_id GROUP BY workplans.division_name;");

尝试通过原始选择执行此操作:

$report = DB::table('workplans')
    ->join('progress','workplans.id','=','progress.activity_id')
    ->select(DB::raw('avg(progress.score) as avg_progress_score'))
    ->groupBy('workplans.division_name')
    ->get();

您想要的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 aggregate函数返回表中所有列的平均值,而不是返回查询的引用,以便继续链接其他函数。解决方法是使用DB::raw方法使用MySQL AVG函数手动指定平均值。

您的连接使用progress.activity\u id,但您说外键是workplan\u id。只是为了检查这是否是您刚才犯的错误,或者这是否是您遇到麻烦的原因!!我的坏消息是,我刚刚编辑了itAlso,以便访问->选择(DB::raw('avg(progress.score)as averageScore'))Thanx mate以获得帮助!!