所以我有这些数据:
表' group_info':
identifier name
123 group a
124 group b
表:' group_participants':
id group_id privilege
1 123 admin
2 123 user
3 124 admin
我希望获得“用户”的人数。或者' admin'以及用户ID为其成员的所有组的' admin'以及组标识符和名称的人数。
e.g。在上面的情况下,这将返回123,'组a',2个用户和1个管理员。
我尝试在单个查询中执行此操作,但无法完成最后一部分。到目前为止我有这个:
SELECT group_info.identifier, group_info.name
FROM `group_info`
LEFT JOIN group_participants ON group_participants.group_id = group_info.identifier
WHERE group_participants.user_id = 1
我知道这可以在2个查询中轻松完成,但我宁愿一次完成所有操作。有任何想法如何格式化子查询来实现这个目标吗?
答案 0 :(得分:1)
您的问题不明确"用户或以上"手段。但是你的问题的答案是使用条件聚合和HAVING
子句:
SELECT gi.identifier, gi.name,
sum(gp.priviledge in ('user', 'admin')) as numUserOrAdmin,
sum(gp.priviledge = 'admin') as numAdmins
FROM group_info gi LEFT JOIN
group_participants gp
ON gp.group_id = gi.identifier
GROUP BY gi.identifier, gi.name
HAVING SUM(gp.user_id = 1) > 0