所以我有以下查询
SELECT deptno, COUNT(deptno) number_of_jobs
FROM emp
WHERE job = 'SALESMAN'
GROUP BY deptno
ORDER BY number_of_jobs ASC;
这样做的目的是让我回到30号部门,而我也想要部门10和20。
喜欢这个
deptno number_of_jobs
10 (here it can be null or 0 doesn't really matter)
20 (same like dept 10)
30 4
我知道这很容易,我相信它是使用连接条件完成的,但我无法理解它。
谢谢你们!
答案 0 :(得分:2)
您需要使用部门表LEFT JOIN
这个。 LEFT JOIN
返回左表中的所有行,即使它们在右表中没有匹配项。
SELECT d.deptno, COUNT(e.deptno) number_of_jobs
FROM dept d
LEFT JOIN emp e ON e.deptno = d.deptno AND e.job = 'SALESMAN'
GROUP BY d.deptno
ORDER BY number_of_jobs ASC
请注意,您必须使用COUNT(e.deptno)
而不是COUNT(*)
,否则它将使用emp
表中的空值计算行。当您为COUNT
提供列名时,它只会计算该列的非空值,因此对于没有匹配的行,您将获得0
。