Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 分组求平均时使用Laravel查询表_Php_Mysql_Laravel - Fatal编程技术网

Php 分组求平均时使用Laravel查询表

Php 分组求平均时使用Laravel查询表,php,mysql,laravel,Php,Mysql,Laravel,我有一个名为“评估数据”的表: 它收集特定学科中一系列学生的给定房间/评估id/科目/单元/结果的评估水平 这是我的Laravel查询: $assessment_tally_levels = DB::table('assessment_data') ->join('subjects', 'assessment_data.subject_id', '=', 'subjects.id') ->select('subjects.short_name as Subject'

我有一个名为“评估数据”的表:

它收集特定学科中一系列学生的给定房间/评估id/科目/单元/结果的评估水平

这是我的Laravel查询:

$assessment_tally_levels = DB::table('assessment_data')
    ->join('subjects', 'assessment_data.subject_id', '=', 'subjects.id')
    ->select('subjects.short_name as Subject', 'assessment_data.assessed_level as Level', DB::raw('count(*) as Students'))
    ->where('assessment_data.user_id', Auth::id()) 
    ->where('assessment_data.room_id', $room_id)
    ->whereBetween('assessment_data.created_at', [$current_term->term_start." 00:00:01", $current_term->term_end." 23:59:59"])
    ->orderByRaw('assessment_data.assessed_level ASC')
    ->groupBy('assessment_data.subject_id')
    ->groupBy('assessment_data.assessed_level')
    ->get()
    ->toJson();
作为JSON输出,我得到的是:

[{“学科”:“科学”,“水平”:1,“学生”:16},{“学科”:“物理” 教育,水平:1,学生:1,科目:数学,水平:1,学生:1,科目:ELA,水平:1,学生:2,科目:艺术,水平:2,学生:1,科学,水平:2,学生:23,科目:CTF,水平:2,学生:1,科目:1,科目:2,学生:3,科目:ELA,水平:2,学生:物理 教育,等级:2,学生:3,{“学科”:“物理” 教育,水平:3,学生:3,科目:艺术,水平:3,学生:1,科目:科学,水平:3,学生:40,科目:健康,水平:3,学生:4,科目:数学,水平:3,学生:4,科目:数学,水平:3,学生:4,科目:4,科目:物理 教育,水平:4,学生:4,{“学科”:“科学”,水平:4,学生:41,{“学科”:“艺术”,水平:4,学生:4,{“学科”:“健康”,“水平”:4,学生:2,{“学科”:“CTF”,“水平”:4,学生:1,{“学科”:“数学”,“水平”:4,学生:4,{“学科”:“ELA”,“水平”:4,学生:3}]

问题是没有一个班级有40名学生(如上面的科学3级行所示)

下面是一个链接,指向上面示例中的完整数据集(不确定如何与您共享此数据):

我需要根据学生id将学生分组,并将该学生对某一科目的所有评估水平取平均值,以获得该学生的单个得分


我该怎么做?

目前您正在计算评估数量

你必须计算每个学生的人数:

DB::raw('count(distinct student_id) as Students')

在你的
学生
模型中,你的雄辩关系是什么样的?我提出这个问题的原因是,如果您可以使用('assessments.results')->groupBy('assessments.subject.shortname')执行类似于
Students:all()->的操作,这种查询会容易得多尝试将(不同的学生id)计数为学生
@Spholt-我应该好好复习一下我的口才。任何时候,只要一个查询通过了一对一,为了简单起见,我就直接进入查询生成器(一开始)。您提供的查询看起来确实不错。在这个具体实例中,只有两个表,一个用于存储评估数据,另一个用于存储对象名称。我猜用雄辩的…?@JonasStaudenmeir-将学生分组的工作已经完成了,用它来建立这种关系不会太困难。有没有办法把那些不是整数的学生上下取整,这样他们就可以和其他学生一样被分为4个整数层(1、2、3和4)?现在我有两个孩子,分别是2.87分、3.25分和3.4分。我希望将它们分别四舍五入为“3”、“3”和“3”。(对不起,我知道这超出了此操作的范围。可以发布计算平均值的查询吗?