MySQL - 计入登录的团队成员

时间:2012-04-26 02:29:56

标签: mysql sql

我有以下表格:

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

1 个答案:

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