我有两张桌子:
名:
id name
--- -----
1 Linda
2 John
3 Mary
4 Charles
人:的
id person
--- -----
1 John
2 Mary
3 Mary
4 Charles
5 Charles
6 Charles
SQL小提琴:http://sqlfiddle.com/#!9/acaf4
我想在人员表中列出名称值(包括零)的出现次数。
我使用了以下查询,但结果并不包含零值:
SELECT person AS n,
COUNT(person) AS name_occurrence
FROM people
LEFT JOIN names ON people.person = names.name
GROUP BY person
ORDER BY name_occurrence ASC;
结果是:
n name_occurrence
------- ---------------
John 1
Mary 2
Charles 3
我想要的是:
n name_occurrence
------- ---------------
Linda 0
John 1
Mary 2
Charles 3
答案 0 :(得分:3)
由于names
表包含所有已知名称,我认为您希望LEFT JOIN
此表包含一个表,其中包含people
表中显示的每个名称的计数。如果名称未显示在people
中,我会使用COALESCE
将该缺失的计数替换为零。
SELECT n.name,
COALESCE(t.personCount, 0) AS personCount
FROM names n
LEFT JOIN
(
SELECT person, COUNT(*) AS personCount
FROM people
GROUP BY person
) t
ON n.name = t.person
使用@strawberry完成的优秀工作点击下面的链接,找到一个令人愉快的小提琴:
答案 1 :(得分:0)
如果您希望第一个表格成为您的主记录,我认为您需要以其他方式进行联接。所以你可以从左到右改变连接