【问题标题】:Get amount of records from one table using join使用连接从一个表中获取记录数量
【发布时间】:2016-04-08 21:58:07
【问题描述】:

情况是这样的:

  • 我有 3 个表,usergroupuser_group(关系表)
  • user 中我们有:id
  • group 中我们有:id, people(群组中最多可容纳的人数)
  • user_group 中:group_id、user_id

我想在同一个查询中完成的是获取所有尚未满的。这意味着与该组关联的 user_group(总计) 少于 group 中的 people (group.people)。 p>

例如:id=5 且 people=6 的组,并且有 6 个 user_group 且 group_id=5。所以我想要的查询不会得到 group.id=5

这是我到目前为止所得到的:

SELECT `group`.*
FROM `group`
JOIN `user_group` ON `user_group`.`group_id` = `group`.`id`
WHERE `group`.`people` > ¿COUNT(total_user_gruop)?

我想过做一个子查询来获取每个组的 user_groups 总数,但我不知道如何实现,或者是否有可能......

谢谢大家!

【问题讨论】:

    标签: mysql


    【解决方案1】:

    您需要一个GROUP BYHAVING 子句。

    HAVING 在 GROUP BY 之后执行并计数,因此您有需要与组人员进行比较的计数。

    我在这里使用 distinct 只是因为我不知道您是否允许在用户组表中重复;而且我认为如果存在这样的重复项,则不应多次计入总数。

    SELECT G.Group_ID, count(Distinct UG.User_ID)
    FROM user_group UG
    INNER JOIN `group` G
     on UG.Group_ID = G.ID
    GROUP BY G.Group_ID
    HAVING count(Distinct UG.User_ID) < G.People
    

    【讨论】:

    • 我不允许重复。但是我从您的查询中学到了一些新东西。谢谢!
    【解决方案2】:

    检查这个查询。

    Select `group`.*, count(`user_group`.user_id) as current_users from `user_group` 
    inner join `group` on `group`.id = `user_group`.group_id
    group by `user_group`.group_id
    having count(`user_group`.user_id) < `group`.people
    

    【讨论】:

      【解决方案3】:

      希望这能解决您的问题。

      SELECT *
      FROM `group`
      INNER JOIN `user_group` ON `group`.`id` = `user_group`.`group_id`
      GROUP BY `user_group`.`group_id`
      HAVING COUNT(`user_group`.`user_id`) < `group`.`people`
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-10-08
        • 2020-04-09
        • 2012-12-16
        • 1970-01-01
        • 1970-01-01
        • 2020-08-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多