Php 获取第一个’的平均值;查询larvel中的sn元素

Php 获取第一个’的平均值;查询larvel中的sn元素,php,laravel,Php,Laravel,我被困在愚蠢的事情中,但不知道如何做,每当我想得到一列的平均值而不从de数据库检索所有数据时,我只运行以下代码: Result::where('test_id', $test->id)->avg('grade') 一个特定示例的答案是37,现在当我想要获得前10行时,我将运行以下命令: Result::select('grade')->where('test_id', $test->id) ->orderBy('grade', 'asc')->

我被困在愚蠢的事情中,但不知道如何做,每当我想得到一列的平均值而不从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();
如果我使用计算器得到平均成绩,我会得到33分,但如果我运行以下命令,我会:

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

我得到的数据与总数据集相同。我很确定这是一件愚蠢的事情,但我不知道它是什么。

我有点猜测,因为我现在还没有准备好测试它,但我想,你正在使用,它有一个SQL聚合函数和
限制(10)
是在聚合已经发生并且只有一行的情况下应用的

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

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

我编辑了最后一个“grade”字符串的卷曲引号,因为我假设如果这是在您的实际代码中,您会得到一个解析错误,而不是37。是的,在实际代码中(一个复制粘贴问题),ThanksWell,这确实解决了问题,非常感谢,无论如何,还有一个问题,当我尝试使用一个相当大的数据集时,就使用get()方法而言,事情会不会变得有点慢,并且会占用大量内存??。是的。对于只有10个项目,这可能不会有太大的区别,但对于更多的项目,我肯定会设法找到一种方法让数据库来完成。我认为这需要进行子查询以获得有限的集合,然后在该集合上进行avg,但不幸的是,我对Laravel查询生成器有点生疏,所以我不知道该怎么做。