在多个条件下跨多个表的MySQL计数
我需要生成一份报告,根据拥有超过“x”个成员的组(成员是用户,可以注册也可以不注册)显示有多少注册用户 真正的简化版本是:在多个条件下跨多个表的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
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