Это дополнительный вопрос к Как посчитать отдельные значения из двух столбцов в одно число
Я хотел знать, как выполнить подсчет, и пренебрег тем, что я уже присоединяюсь некоторые другие таблицы в миксе.
Ответ на предыдущий вопрос является правильным для этого случая.
Вот моя дополнительная проблема.
У меня 3 таблицы :
Назначения
+----+-------------------+
| id | name |
+----+-------------------+
| 1 | first-assignment |
| 2 | second-assignment |
+----+-------------------+
Представления
+----+---------------+------------+
| id | assignment_id | student_id |
+----+---------------+------------+
| 1 | 1 | 2 |
| 2 | 2 | 1 |
| 3 | 1 | 3 |
+----+---------------+------------+
Group_submissions
+----+---------------+------------+
| id | submission_id | student_id |
+----+---------------+------------+
| 1 | 1 | 1 |
| 2 | 2 | 2 |
+----+---------------+------------+
Каждое представление относится к назначению.
Заявки могут быть индивидуальной или групповой.
Когда они индивидуальны, тот, кто отправил заявку в назначении (assignment_id), попадает в таблицу представлений (student_id)
Когда они групповые Представление то же самое происходит с двумя дополнительными деталями:
- Тот, кто выполняет отправку, попадает в таблицу представлений
- Остальные go в группу таблицы p_submissions и связаны с идентификатором в таблице представлений (поэтому submission_id - это FK из таблицы представлений)
Я хочу вернуть каждое задание с его столбцами, но также добавить количество студентов, которые сделали представления в этом назначении. Помните, что учащиеся, которые не подали заявку (не находятся в таблице подачи заявок), но участвовали в групповой подаче заявки (находятся в таблице group_submissions), также считают
Примерно так:
+----+-------------------+----------+
| id | name | students |
+----+-------------------+----------+
| 1 | first-assignment | 11 |
| 2 | second-assignment | 2 |
+----+-------------------+----------+
Я попробовал 2 способа получения чисел:
count(distinct case when group_submissions.student_id is not null then
group_submissions.student_id when assignment_submissions.student_id is
not null then assignment_submissions.student_id end)
Это не работает, потому что инструкция case будет коротко замкнута, как только будет выполнено первое условие. Например: если один студент сделал групповые представления, но фактически никогда не делал представления, он / она будет отображаться только в таблице group_submissions. Таким образом, если в таблице представлений идентификатор равен 1, а в таблице group_submission идентификатор равен 2, а идентификатор 2 не встречается в таблице представлений, он не будет засчитан.
count(distinct case when group_submissions.student_id is not null then group_submissions.student_id end)
+ count(distinct case when submissions.student_id is not null then submissions.student_id end)
Это не работать, потому что он дает дубликаты, если ученик находится в обеих таблицах.
ПРИМЕЧАНИЕ: Это MySQL база данных