【问题标题】:Displaying zero-valued data in an SQL Query?在 SQL 查询中显示零值数据?
【发布时间】:2010-10-26 04:13:21
【问题描述】:

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

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) );

我还有如下查询,就是列出每个团队的成员人数:

SELECT teamID, count(memberID) AS [noOfMembers]
FROM member
GROUP by teamID;

但是,我有四个团队(MRT1、MRT2、MRT3 和 MRT4)。我表中的成员仅属于团队 2 和 3,因此当我运行查询时,我得到以下输出:

MRT2: 7, 捷运3:14

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

MRT1: 0, 捷运2:7, 捷运3:14, 捷运4:0

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

【问题讨论】:

    标签: sql select count


    【解决方案1】:

    尝试从 TEAM left JOIN-ing on Member 中选择

    SELECT Team.Teamid, count(memberid)
    FROM 
        TEAM
    LEFT OUTER JOIN 
         Member on Member.teamid = Team.Teamid
    GROUP by Team.Teamid
    

    只是为了给你一些关于这是做什么的背景。

    上面写着

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

    如果你使用

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

    这翻译成

    给我所有来自团队的团队ID,然后为每一个计算成员表中的匹配项,但前提是存在匹配项。

    【讨论】:

    • 太好了,内容丰富,谢谢。一个问题 - LEFT JOIN 和 LEFT OUTER JOIN 之间有什么区别?在这种情况下,我看不出有什么不同,但我敢肯定有一个。
    • LEFT OUTER 和 LEFT 之间没有区别。或者 INNER JOIN 和 JOIN 。
    【解决方案2】:

    对 TEAM 表的右连接应该可以解决问题。

    【讨论】:

      【解决方案3】:
      SELECT teamID, count(memberID) AS [noOfMembers]
      FROM team
      LEFT JOIN member
      ON team.teamID = member.teamID
      GROUP by teamID;
      

      【讨论】:

        【解决方案4】:

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

        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;
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-07-10
          • 1970-01-01
          • 1970-01-01
          • 2021-02-01
          • 1970-01-01
          • 2020-09-15
          • 2015-10-24
          • 2022-08-12
          相关资源
          最近更新 更多