使用join从一个表中获取记录数量

时间:2016-04-08 13:31:11

标签: mysql

情况就是这样:

  • 我有3个表,用户 user_group(关系表)
  • 用户中,我们有: id
  • 群组中,我们有: ID,人(可以在群组中的最多人数)
  • user_group 中: group_id,user_id

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

例如: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总数,但我不知道如何实现这个目标,或者它是否可能......

谢谢大家!

3 个答案:

答案 0 :(得分:1)

您需要GROUP BYHAVING条款。

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

我在这里使用的只是因为我不知道你是否允许在用户组表中使用重复项;如果存在,我认为这样的副本不应该超过总数。

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

答案 1 :(得分:1)

检查此查询。

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

答案 2 :(得分:1)

希望这能解决你的问题。

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`