【问题标题】:Getting average from database in laravel 4从 laravel 4 中的数据库获取平均值
【发布时间】:2014-04-09 14:49:41
【问题描述】:

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

工作计划表:

身份证

部门名称

部门主管

进度表:

身份证

分数

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);

【问题讨论】:

  • 您的加入使用progress.activity_id,但您说您的外键是workplan_id。只是为了检查这是否是您刚刚生气的错误,或者是否是您遇到麻烦的原因
  • 对不起!!我的坏我刚刚编辑了它

标签: php mysql sql laravel-4 average


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    尝试通过原始选择来实现:

    $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();
    

    【讨论】:

    • 为了便于访问,我会这样做 ->select(DB::raw('avg(progress.score) as averageScore'))
    • 感谢队友的帮助!!
    【解决方案3】:

    我不确定如何使用 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;");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-10
      • 2018-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多