仅考虑COUNT个特定ID

时间:2019-07-11 15:41:35

标签: mysql sql

我有几个班次,志愿者可以从至少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;

编辑:

这是表“ rota”的示例。在现实生活中,有100个自愿者ID和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

预期结果将是这样。自愿者ID列将仅考虑在上表中选择6个班次的志愿者:

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

2 个答案:

答案 0 :(得分:1)

此查询将返回选择6个班次的volunteer_id

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

答案 1 :(得分:0)

我想知道有多少志愿者选择了每个班次

reserve()

我想知道谁是选择6个班次的有效志愿者

SELECT COUNT(volunteer_id) FROM rota GROUP BY shift_id

我想知道多少位有效志愿者选择了每个班次

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