【问题标题】:How to do a SUM subquery within a left join query?如何在左连接查询中执行 SUM 子查询?
【发布时间】:2015-08-30 21:04:50
【问题描述】:

所以我有这个数据:

表'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

我想获取用户 ID 1 所属的所有组的“用户”或“管理员”人数以及“管理员”人数以及组标识符和名称的。

例如在上述情况下,这将返回 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 个查询中轻松完成,但我宁愿一次性完成。任何想法如何格式化子查询来实现这一点?

【问题讨论】:

  • 也许不要用“用户”这个词来表示两个不同的东西。你只是让我们感到困惑。

标签: php mysql join subquery


【解决方案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

【讨论】:

  • 我刚刚澄清了这一点。我的意思是用户或以上的权限,所以“用户”或“管理员”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-09-03
  • 1970-01-01
  • 2018-11-01
  • 1970-01-01
  • 2015-09-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多