php - 从 Laravel 4 中的数据库获取平均值

标签 php mysql sql laravel-4 average

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

工作计划表:

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/

相关文章:

sql - postgresql 8.2 中的嵌套事务?

c# - Sqlconnection 仍然需要 ssl 但 "encrypt=false"

c# - 就性能而言,C# 的 ToUpper 或 SQL 中的 Upper 函数哪个更好

php - 使用_GET的PHP变量语法

php - 如何将 "chat message"从 iOS TextField 发送到远程数据库

mysql - org.apache.spark.sql.AnalysisException : cannot recognize input near 'num' ':' '=' in expression specification;

java - 如果java中的结果集为负数,如何获取时间

php - 如何将日文英文字符转换为普通英文字符?

php - 如何从 include() 文件中创建相对于不同 PHP 文档的链接?

php - 根据从动态下拉框中选择的值预填充文本字段(在表单中)