Использование Laravel для запроса таблицы при группировании и усреднении - PullRequest
0 голосов
/ 01 мая 2018

У меня есть таблица с именемvaluation_data: assessment_data table screenshot

Он собирает оцененный уровень для данной комнаты / оценочного идентификатора / предмета / единицы / результата серии учащихся по определенному предмету.

Это мой запрос 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}, { "Тема": "Phys Эд», "Уровень": 1, "Студенты": 1}, { "Тема": "Математика", "Уровень": 1, "Студенты": 1}, { "Тема": "ELA", "Уровень" : 1, "Студенты": 2}, { "Тема": "Искусство", "Уровень": 2, "Студенты": 1}, { "Тема": "Наука", "Уровень": 2, "Студенты" : 23}, { "Субъект": "ЦФК", "Уровень": 2, "Студенты": 1}, { "субъект": "Math", "Уровень": 2, "Студенты": 3}, {» Тема ":" ELA " "Уровень": 2, "Студенты": 3}, { "Тема":" Phys Ed " "Уровень": 2, "Студенты": 3}, { "Тема":" Phys Эд», "Уровень": 3, "Студенты": 3}, { "Тема": "Искусство", "Уровень": 3, "Студенты": 1}, { "Тема": "Наука", "Уровень" : 3, "Студенты": 40}, { "Тема": "Здоровье", "Уровень": 3, "Студенты": 4}, { "Тема": "CTF", "Уровень": 3, "Студенты" : 4}, { "Тема": "Математика", "Уровень": 3, "Студенты": 4}, { "Тема": "ELA", "Уровень": 3, "Студенты": 4}, {» Тема ":" Phys Эд», "Уровень": 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

Мне нужно сгруппировать студентов по их студенческому идентификатору и усреднить все оценочные уровни этого студента по предмету вместе, чтобы получить единый подсчет для студента.

Как я могу это сделать?

1 Ответ

0 голосов
/ 02 мая 2018

На данный момент вы рассчитываете количество оценок.

Вы должны подсчитать отдельных студентов:

DB::raw('count(distinct student_id) as Students')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...