我有一张叫assessment_data的桌子:

它收集特定学科的一系列学生的给定房间/评估id/主题/单元/结果的assessed_level。
这是我的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},{“学科”:“数学”,“层次”:2,“学生”:3},{“学科”:“ELA”,“水平”:2,“学生”:3},{“学科”:“物理教育”,“层次”:2,“学生”:3},{“学科”:“物理教育”:3,“学生”:3},{“学科”:“艺术”,“层次”:3,“学生”:1},{“学科”:“科学”,“层次”:3,“学生”:40},{“学科”:“健康”,“水平”:3,“学生”:4},{“学科”:“CTF”,“层次”:3,“学生”:4},{“学科”:“数学”、“层次”:3、“学生”:4}、{“学科”:“ELA”、“层次”:3、“学生”:4}、{“物理教育”、“层次”:4、“学生”:4}、{“学科”:“科学”、“层次”:4、“学生”:41}、{“学科”:“艺术”、“艺术”:4、“学生”:4},{“学科”:“健康”、“层次”:4、“学生”:2}、{“学科”:“CTF”、“层次”:4、“学生”:1}、{“学科”:“数学”、“层次”:4、“学生”:4}、{“学科”:“ELA”、“层次”:4、“学生”:3}
问题是,没有一个班级有40名学生(如上面的“科学3级”所示)。
下面是上面示例中的完整数据集的链接(不确定如何与您共享这些数据):https://docs.google.com/spreadsheets/d/1swc9AVLp0ZVDJw3UntgpSDQTSB2MaSunVul7zR0kNf8/edit?usp=sharing
我需要将学生按他们的student_id组合在一起,并将所有学生的assessed_levels平均在一起,以便为学生获得一个单一的统计数字。
我该怎么做?
发布于 2018-05-01 21:28:23
目前,您正在计算评估的数量。
你必须清点学生的人数:
DB::raw('count(distinct student_id) as Students')https://stackoverflow.com/questions/50116925
复制相似问题