【问题标题】:SQL - Having 0 when using CountSQL - 使用 Count 时为 0
【发布时间】:2013-04-02 18:55:18
【问题描述】:

我有一份职业列表如下:

Doctor Male
Teacher  Male
Principal Male
Nurse Female
Doctor Male

当我按专业对它们进行分组时,我希望 Access 为不在我拥有的子列表中的任何专业返回 0。这是我正在使用的代码:

SELECT Profession.Profession, Count(Profession.Profession) AS CountOfProfession
FROM People INNER JOIN Profession ON People.PeopleID = Profession.PeopleID
WHERE (((People.Sex)="Male"))
GROUP BY Profession.Profession;

我希望它为 Doctor 产生 2,因为有 2 名男性,但也为 Nurse 产生 0,因为没有男性护士。请告诉我如何做到这一点,谢谢!

【问题讨论】:

    标签: sql join count


    【解决方案1】:

    你需要一个外连接。我改变了表格的顺序,所以它是left join

    SELECT Profession.Profession,
           sum(iif(people.sex = "Male", 1, 0)) AS CountOfProfession
    FROM Profession LEFT JOIN
         ON People.PeopleID = Profession.PeopleID 
    GROUP BY Profession.Profession;
    

    【讨论】:

    • where 子句将其转换为内连接。
    • 条件WHERE (((People.Sex)="Male")) 应该省略,我认为。
    • 我还是想知道有多少男性。将此更改为 LEFT JOIN 并不能解决此问题,因为我仍然缺少只有女性作为性别的职业。
    • @Gordon Linoff 似乎您可以按男性进行计数,然后将结果与职业列表一起加入(保持左加入)
    • 我修复了查询。 . .抱歉,今天的大脑一定不能正常工作。我确实知道左连接是如何工作的。
    【解决方案2】:

    这可以通过外连接并将条件从WHERE 移动到ON 子句来完成:

    SELECT Profession.Profession, 
           COUNT(People.PeopleID) AS CountOfProfession
    FROM Profession 
      LEFT JOIN People 
        ON (  People.PeopleID = Profession.PeopleID
          AND People.Sex = 'Male' )
    GROUP BY Profession.Profession ;
    

    【讨论】:

      猜你喜欢
      • 2015-08-14
      • 2022-01-07
      • 2020-12-29
      • 1970-01-01
      • 2022-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-11
      相关资源
      最近更新 更多