我有以下表格:
CREATE TABLE members ( member_id int(1) unsigned NOT NULL AUTO_INCREMENT, logged_in tinyint(1) NOT NULL, PRIMARY KEY (member_id), UNIQUE KEY member_id (member_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO members (member_id, logged_in) VALUES (1, 0), (2, 1), (3, 1), (4, 1), (5, 0); +-----------------------+ | members | +-----------+-----------+ | member_id | logged_in | +-----------+-----------+ | 1 | 0 | | 2 | 1 | | 3 | 1 | | 4 | 1 | | 5 | 0 | +-----------+-----------+
CREATE TABLE team_members ( team_id int(1) unsigned NOT NULL, member_id int(1) unsigned NOT NULL, PRIMARY KEY (team_id,member_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO team_members (team_id, member_id) VALUES (1, 1), (1, 2), (2, 3), (2, 4), (3, 5); +---------------------+ | team_members | +---------+-----------+ | team_id | member_id | +---------+-----------+ | 1 | 1 | | 1 | 2 | | 2 | 3 | | 2 | 4 | | 3 | 5 | +---------+-----------+
这是我需要实现的输出:
+---------+-----------------------+ | team_id | logged_in_users_count | +---------+-----------------------+ | 1 | 1 | | 2 | 2 | | 3 | 0 | +---------+-----------------------+
我正在尝试以下sql查询,但它没有返回预期的输出:
SELECT tm.team_id, (SELECT COUNT(m.logged_in) FROM members m WHERE m.logged_in = 1) AS logged_in_users_count FROM members m INNER JOIN team_members tm ON (m.member_id = tm.member_id) GROUP BY tm.team_id
答案 0 :(得分:2)
SELECT team_members.team_id, COUNT(members.logged_in) FROM team_members LEFT JOIN members ON (team_members.member_id = members.member_id AND members.logged_in = 1) GROUP BY team_members.team_id;