MySQL在具有多个条件的多个表中进行计数

时间:2018-04-19 14:00:15

标签: mysql

我需要根据超过' 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个可能的成员)。我尝试的所有内容都涉及嵌套选择,我可以接近,但不是我需要的确切数据。

2 个答案:

答案 0 :(得分:1)

您只需要LEFT JOINusers表和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

Demo here

答案 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

未测试。