SQL-使用计数时具有0
我有一份职业清单,如下所示:SQL-使用计数时具有0,sql,join,count,Sql,Join,Count,我有一份职业清单,如下所示: 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
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;
我希望它为医生产生2,因为有2名男性,但也为护士产生0,因为没有男性护士。请让我知道我怎么做,谢谢 您需要一个外部联接。我切换了表的顺序,因此它是一个
左连接
:
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
移动到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 ;
where
子句将其转换为一个内部联接。我想应该忽略条件where(((People.Sex)=“Male”)
。不过我还是想知道有多少男性。将此更改为“左连接”并不能解决此问题,因为我仍然缺少只有女性作为性别的职业。@Gordon Linoff似乎可以按男性进行计数,然后将结果与职业列表连接(保留左连接)我修复了查询。很抱歉,大脑今天一定不能正常工作。我确实知道左连接是如何工作的。