使用Laravel在分组和平均时查询表

时间:2018-05-01 12:59:35

标签: php mysql laravel

我有一个名为assessment_data的表: assessment_data table screenshot

它收集特定主题的一系列学生的特定房间/评估ID /科目/单元/结果的assess_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},{&#34受试者#34;:"物理学   ED""级":1,"学生":1},{"主体":"数学"&#34 ;等级":1,"学生":1},{"主体":" ELA""级":1, "学生":2},{"主体":"艺术""级":2"学生" :1},{"主体":"科学""级":2"学生":23},{&#34受试者#34;:" CTF""级":2"学生":1},{"主体":&# 34;数学""级":2"学生":3},{"主体":" ELA",& #34;级":2"学生":3},{"主体":"物理学   ED""级":2"学生":3},{"主体":"物理学   ED""级":3,"学生":3},{"主体":"艺术"&#34 ;等级":3,"学生":1},{"主体":"科学""级":3, "学生" 40},{"主体":"健康""级":3,"学生" :4},{"主体":" CTF""级":3,"学生":4},#34 {&受试者#34;:"数学""级":3,"学生&#34:4},{"主体":&# 34; ELA""级":3,"学生&#34:4},{"主体":"物理学   ED""级&#34:4,"学生&#34:4},{"主体":"科学"&#34 ;等级&#34:4,"学生":41},{"主体":"艺术""级&#34:4, "学生&#34:4},{"主体":"健康""级&#34:4,"学生" :2},{"主体":" CTF""级&#34:4,"学生":1},#34 {&受试者#34;:"数学""级&#34:4,"学生&#34:4},{"主体":&# 34; ELA""级&#34:4,"学生":3}]

问题是没有班级有40名学生(正如上文科学3级中另有说明)。

以下是上述示例中完整数据集的链接(不确定如何与您共享此数据): https://docs.google.com/spreadsheets/d/1swc9AVLp0ZVDJw3UntgpSDQTSB2MaSunVul7zR0kNf8/edit?usp=sharing

我需要通过他们的student_id将学生分组在一起,并将所有学生的评估级别平均分配给学生,以便为学生获得单一记录。

我该怎么做?

1 个答案:

答案 0 :(得分:0)

目前您正在计算评估数量。

你必须计算个别学生:

float_result = 3 - 0.1
formatted_to_two_decimal_places = '{:.2f}'.format(float_result)
# or you can do ... = f'{float_result:.2f}' in python 3.6+
print(formatted_to_two_decimal_places)