Учитывать в COUNT только конкретные идентификаторы - PullRequest
1 голос
/ 11 июля 2019

У меня есть несколько смен, которые волонтеры могут выбрать как минимум из 6 смен. Я хочу знать, сколько добровольцев выбрали каждую смену. Пока здесь все просто, но сложнее, если я просто хочу учесть в COUNT только добровольцев, которые выбрали только 6 смен.

Это то, что я делаю, но это совсем не работает:

SELECT COUNT(volunteer_id), shift_id 
FROM rota
WHERE volunteer_id IN (SELECT volunteer_id FROM rota HAVING 
                       COUNT(volunteer_id) = 6)
GROUP BY shift_id;

Edit:

Это пример таблицы "рота". В реальной жизни есть 100 добровольцев_ид и 15 разных shift_id

id  volunteer_id   shift_id
1      1               3
2      1               2
3      1               1
4      2               1
5      2               2
6      2               7
7      2               12
8      2               5
9      2               6
10     3               2
11     3               3
n

Ожидаемые результаты будут примерно такими. Столбец волонтер_ид будет учитывать только тех добровольцев, которые выбрали 6 смен в приведенной выше таблице:

shift_id      COUNT(volunteer_id)
     1                5
     2                32
     3                12
     4                9
     n

Ответы [ 2 ]

1 голос
/ 11 июля 2019

Это запрос, который вернет volunteer_id, которые выбрали 6 смен:

SELECT volunteer_id FROM rota GROUP BY volunteer_id HAVING COUNT(shift_id) = 6

Так что используйте его так:

SELECT shift_id, count(distinct volunteer_id) counter FROM rota 
WHERE volunteer_id IN (
  SELECT volunteer_id FROM rota GROUP BY volunteer_id HAVING COUNT(shift_id) = 6
) 
GROUP BY shift_id
0 голосов
/ 11 июля 2019

Я хочу знать, сколько добровольцев выбрали каждую смену

SELECT COUNT(volunteer_id) FROM rota GROUP BY shift_id

Я хочу знать, кто является действительными волонтерами, которые выбрали 6 смен

SELECT volunteer_id
    FROM (
      SELECT COUNT(shift_id) c FROM rota GROUP BY volunteer_id
    ) as tmp WHERE c=6

Я хочу знать, сколько действительных добровольцев выбрали каждую смену

SELECT COUNT(volunteer_id),shift_id FROM rota
WHERE volunteer_id IN(
    SELECT volunteer_id
    FROM (
      SELECT COUNT(shift_id) c FROM rota GROUP BY volunteer_id
    ) as tmp WHERE c=6

)
GROUP BY shift_id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...