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