我需要统计一家公司的所有考试,如果该公司不存在于考试表中,则返回 0。
在我的公司表中,我有 3 家公司。这是我的查询:
SELECT c.name, ISNULL(COUNT(e.ID), 0)
FROM Exam e
INNER JOIN Company c ON c.ID = e.COMPANY_ID
GROUP BY c.name
Run Code Online (Sandbox Code Playgroud)
它返回 2 行,但我想显示检查表中没有任何记录的第三家公司。
我怎样才能做到这一点?
您需要一个 RIGHT 或更常见的 LEFT JOIN:
select
c.name,
COUNT(e.COMPANY_ID)
from
Company c left join Exam e
ON c.ID = e.COMPANY_ID
group by
c.name
Run Code Online (Sandbox Code Playgroud)
左连接将返回左表中的所有记录,并且仅返回该表中匹配的Company记录。ExamCount 将计算所有非空值。