Sql 如何在此查询中选择其他部门
因此,我有以下疑问Sql 如何在此查询中选择其他部门,sql,oracle,Sql,Oracle,因此,我有以下疑问 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
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
我知道这相当容易,我相信这是使用连接条件完成的,但我就是无法理解它
谢谢大家 您需要
将其与您的部门表左连接。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
。谢谢!实际上,COUNT(e.deptno)number of_jobs返回我0,否则COUNT无论如何都会返回1谢谢你的帮助!!你说得对,我经常忘记那个细节。