Php 分组求平均时使用Laravel查询表
我有一个名为“评估数据”的表: 它收集特定学科中一系列学生的给定房间/评估id/科目/单元/结果的评估水平 这是我的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'
$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”。(对不起,我知道这超出了此操作的范围。可以发布计算平均值的查询吗?