我陷入愚蠢的境地,但不知道该怎么做,每当我想获得一个列的平均值而不从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。我很确定这是一件愚蠢的事情,但我无法弄清楚它是什么。
答案 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');