在多个条件下跨多个表的MySQL计数

在多个条件下跨多个表的MySQL计数,mysql,Mysql,我需要生成一份报告,根据拥有超过“x”个成员的组(成员是用户,可以注册也可以不注册)显示有多少注册用户 真正的简化版本是: table.users userid int(11) NOT NULL, username VARCHAR(40), PRIMARY KEY (userid) table.groups gid int(11) NOT NULL, guserid int(11) NOT NULL, groupid VARCHAR(12) NOT NULL, PRIMARY KEY (gid

我需要生成一份报告,根据拥有超过“x”个成员的组(成员是用户,可以注册也可以不注册)显示有多少注册用户

真正的简化版本是:

table.users
userid int(11) NOT NULL,
username VARCHAR(40),
PRIMARY KEY (userid)

table.groups
gid int(11) NOT NULL,
guserid int(11) NOT NULL,
groupid VARCHAR(12) NOT NULL,
PRIMARY KEY (gid)
以及一些样本数据:

INSERT INTO users (userid, username) VALUES
('1','bob'),('2','steve'),('3',''),('4','jill'),
('5',''),('6',''),('7','john'),('8','stan'),
('9',''),('10','rachel'),('11','lisa');
在这11个用户中,有7个拥有用户名(已注册)

我需要获得groupid,groups表中该groupid的计数,然后是为该组注册的用户计数(username不为null)


真正的数据是一个更大的子集,我只需要在用户数量可能超过500人的情况下得到结果(即大约1000个用户组,可能有500到25000名成员)。我尝试的所有操作都涉及嵌套选择,我可以接近,但不是返回我需要的确切数据。

您只需将
左连接到
用户
表和
计数

SELECT groupid, COUNT(*), COUNT(DISTINCT u.username)
FROM groups AS g
LEFT JOIN users AS u ON u.userid = g.guserid AND u.username <> ''
GROUP BY groupid
选择groupid、COUNT(*)、COUNT(不同的u.username)
来自组作为g
以u.userid=g.guserid和u.username“”上的u的身份左键加入用户
按组ID分组

大致如下:

SELECT groups.gid,
       COUNT(groups.gid),
       SUM(CASE WHEN users.username='' THEN 1 ELSE 0 END)
  FROM groups
  JOIN users ON users.userid=groups.guserid
 GROUP BY groups.gid
未经测试。

我喜欢SUM(在-我没有想到这一点的情况下),我能够从这份报告中挖掘出更多有用的信息,并将其用于其他领域。谢谢!
SELECT groupid, COUNT(*), COUNT(DISTINCT u.username)
FROM groups AS g
LEFT JOIN users AS u ON u.userid = g.guserid AND u.username <> ''
GROUP BY groupid
SELECT groups.gid,
       COUNT(groups.gid),
       SUM(CASE WHEN users.username='' THEN 1 ELSE 0 END)
  FROM groups
  JOIN users ON users.userid=groups.guserid
 GROUP BY groups.gid