Как посчитать разные значения из двух столбцов в одно число - PullRequest
3 голосов
/ 10 марта 2020

Вот две таблицы, над которыми я работаю:

Материалы:

+----+------------+
| id | student_id |
+----+------------+
|  1 |          1 |
|  2 |          2 |
|  3 |          3 |
+----+------------+

Group_submissions:

+----+---------------+------------+
| id | submission_id | student_id |
+----+---------------+------------+
|  1 |             1 |          2 |
|  2 |             2 |          1 |
+----+---------------+------------+

Только один студент на самом деле делает заявку и идет в таблицу заявок, в то время как остальные go в таблицу group_submissions (если заявка представляет собой групповую заявку)

Я хочу подсчитать уникальное количество студентов, которые подали заявку как в группе, так и в одиночку

Я хочу, чтобы в итоге было возвращено только число (3 на основе данных из таблиц выше)

Учащийся, который находится в таблице представления, не должен учитываться дважды, если он находится в таблица group_submission и наоборот.

Кроме того, ученики, которые сделали только отдельные заявки (которых нет в таблице group_submissions), также должны учитываться независимо от того, были ли они когда-либо в групповой подаче

Я уже выполняю некоторые другие операции над этими таблицами в запросе, который создаю, поэтому, если вы можете дать мне решение, основанное на две таблицы, которые могли бы помочь.

Вот что я пробовал:

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.

Ответы [ 2 ]

2 голосов
/ 10 марта 2020

Я думаю, вы хотите union и счет:

select count(*)
from ((select student_id
       from submissions
      ) 
      union   -- on purpose to remove duplicates
      (select student_id
       from group_submissions
      )
     ) s;
0 голосов
/ 10 марта 2020

Выслушав разъяснение, я думаю, что не стоит заставлять себя вычислять это с помощью объединения. Вместо этого вы можете сделать подсчет простым выражением в качестве конечного результата. Используйте UNION, и тогда отличный поможет для построения такого выражения.

СТАРЫЙ ОТВЕТ НИЖЕ, КОТОРЫЙ НЕ УСТАВЛЯЕТ ПРОБЛЕМУ:

Для вашей текущей версии требуется очень простое исправление ...

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)

Примечание:

  • Ваше исходное выражение представляет собой сложение между 2-мя падежными выражениями, каждое с одним WHEN внутри
  • теперь я превращаю его в однозначное выражение с 2 WHEN``` SQL
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...