我需要根据超过' x'的群组生成一个报告,说明有多少注册用户。成员(成员是用户,可以注册或未注册)。
真正的简化版本是:
table_2
以及一些示例数据:
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)
在这11个用户中,有7个用户名(已注册)
INSERT INTO users (userid, username) VALUES
('1','bob'),('2','steve'),('3',''),('4','jill'),
('5',''),('6',''),('7','john'),('8','stan'),
('9',''),('10','rachel'),('11','lisa');
我需要获取groupid,groups表中该groupid的计数,然后是为该组注册的用户数(username不为null)。
INSERT INTO groups (gid, guserid, groupid) VALUES
('1','1','ABC123'),('2','2','ABC123'),('3','3','XYZ789'),('4','4','ABC123'),
('5','5','XYZ789'),('6','6','ABC123'),('7','7','DEF456'),('8','8','ABC123'),
('9','9','DEF456'),('10','10','XYZ789'),('11','11','XYZ789');
真实数据是一个更大的子集,我只需要获得结果,其中我们有超过500个组的可能用户数(大约1,000个组,其中有500到25000个可能的成员)。我尝试的所有内容都涉及嵌套选择,我可以接近,但不是我需要的确切数据。
答案 0 :(得分:1)
您只需要LEFT JOIN
到users
表和COUNT
:
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
答案 1 :(得分:1)
有些事情:
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
未测试。