在SQL查询中显示零值数据?

在SQL查询中显示零值数据?,sql,select,count,Sql,Select,Count,我有以下两个表格(简化了这个问题): 我还有以下查询,即列出每个团队的成员数量: SELECT teamID, count(memberID) AS [noOfMembers] FROM member GROUP by teamID; 然而,我有四个团队(MRT1、MRT2、MRT3和MRT4)。我表中的成员只属于团队2和团队3,因此当我运行查询时,我会得到以下输出: MRT2:7, MRT3:14 我不确定如何调整我的查询以列出所有4个团队,如下所示: MRT1:0, MRT2:7, MRT

我有以下两个表格(简化了这个问题):

我还有以下查询,即列出每个团队的成员数量:

SELECT teamID, count(memberID) AS [noOfMembers]
FROM member
GROUP by teamID;
然而,我有四个团队(MRT1、MRT2、MRT3和MRT4)。我表中的成员只属于团队2和团队3,因此当我运行查询时,我会得到以下输出:

MRT2:7, MRT3:14

我不确定如何调整我的查询以列出所有4个团队,如下所示:

MRT1:0, MRT2:7, MRT3:14, MRT4:0


我一直在处理子查询来解决这个问题,但没有任何运气。有什么想法吗?谢谢

尝试从团队左侧选择加入成员

SELECT Team.Teamid, count(memberid)
FROM 
    TEAM
LEFT OUTER JOIN 
     Member on Member.teamid = Team.Teamid
GROUP by Team.Teamid
只是想给你一些关于这是怎么回事的背景知识

上面说

给我团队中的所有团队ID,然后对每个团队ID计算成员表中的匹配项,即使没有匹配项

如果你使用

SELECT Team.Teamid, count(memberid)
FROM 
    TEAM
INNER JOIN 
     Member on Member.teamid = Team.Teamid
GROUP by Team.Teamid
这意味着

给我团队中的所有团队ID,然后为每个团队统计成员表中的匹配项,但仅当存在匹配项时


正确加入团队表应该可以解决这个问题。

我做了这个测试,并为我工作

SELECT teamID, count(memberID) AS [noOfMembers]
FROM team
LEFT JOIN member
ON team.teamID = member.teamID
GROUP by teamID;
CREATE TABLE team (
 teamID CHAR(6) NOT NULL PRIMARY KEY); 

CREATE TABLE member (
 memberID CHAR(7) NOT NULL PRIMARY KEY,
 teamID CHAR(6) NOT NULL REFERENCES team(teamID) );

INSERT INTO team (teamID) VALUES ('T1')
INSERT INTO team (teamID) VALUES ('T2')
INSERT INTO team (teamID) VALUES ('T3')
INSERT INTO team (teamID) VALUES ('T4')

INSERT INTO member (memberID, teamID) VALUES ('M1', 'T1')
INSERT INTO member (memberID, teamID) VALUES ('M2', 'T1')
INSERT INTO member (memberID, teamID) VALUES ('M3', 'T1')
INSERT INTO member (memberID, teamID) VALUES ('M4', 'T3')

SELECT Team.teamID, count(member.memberID) AS [noOfMembers]
FROM Team LEFT JOIN member ON Member.teamID = Team.teamID
GROUP BY ALL Team.teamID;

太好了,真的很有用,谢谢。一个问题-左连接和左外部连接之间的区别是什么?在这种情况下,我看不出有什么区别,但我肯定有区别。左外和左外之间没有区别。或者内在的结合,为了这个问题而结合。
CREATE TABLE team (
 teamID CHAR(6) NOT NULL PRIMARY KEY); 

CREATE TABLE member (
 memberID CHAR(7) NOT NULL PRIMARY KEY,
 teamID CHAR(6) NOT NULL REFERENCES team(teamID) );

INSERT INTO team (teamID) VALUES ('T1')
INSERT INTO team (teamID) VALUES ('T2')
INSERT INTO team (teamID) VALUES ('T3')
INSERT INTO team (teamID) VALUES ('T4')

INSERT INTO member (memberID, teamID) VALUES ('M1', 'T1')
INSERT INTO member (memberID, teamID) VALUES ('M2', 'T1')
INSERT INTO member (memberID, teamID) VALUES ('M3', 'T1')
INSERT INTO member (memberID, teamID) VALUES ('M4', 'T3')

SELECT Team.teamID, count(member.memberID) AS [noOfMembers]
FROM Team LEFT JOIN member ON Member.teamID = Team.teamID
GROUP BY ALL Team.teamID;