获取查询LARAVEL中前N个元素的平均值

时间:2017-09-15 22:54:09

标签: php laravel

我陷入愚蠢的境地,但不知道该怎么做,每当我想获得一个列的平均值而不从de数据库中检索所有数据时我只运行以下代码:

Result::where('test_id', $test->id)->avg('grade')

特定示例的答案是37,现在当我想获得前10行时,我将运行:

Result::select('grade')->where('test_id', $test->id)
       ->orderBy('grade', 'asc')->limit(10)->get();

这个过程将给我前10行,如果我使用计算器得到平均成绩我会得到33,但如果我运行以下我:

Result::where('test_id', $test->id)->orderBy('grade','asc')->limit(10)->avg('grade');

我得到与总数据集相同的37。我很确定这是一件愚蠢的事情,但我无法弄清楚它是什么。

1 个答案:

答案 0 :(得分:1)

我有点猜测,因为我现在没有设置好测试,但我想的是,你正在使用builder avg method,这是一个SQL聚合函数,并且在聚合已经发生之后正在应用limit(10),并且反正只有一行。

我认为如果您在获得有限的结果后执行avg,那么您将使用collection avg method代替,并对查询返回的10行进行平均。

Result::where('test_id', $test->id)
        ->orderBy('grade','asc')->limit(10)->get()->avg('grade');