如何在左连接查询中执行SUM子查询?

时间:2015-08-30 21:04:51

标签: php mysql join subquery

所以我有这些数据:

表' 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个查询中轻松完成,但我宁愿一次完成所有操作。有任何想法如何格式化子查询来实现这个目标吗?

1 个答案:

答案 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