您尝试编写的查询是:(
表创建从shree.pat18的 sqlfiddle 修改为这个sqlfiddle)
create table department (deptno int, deptname varchar(20));
insert into department values (1, 'a'),(2, 'b'),(3, 'c');
create table employee (empno int, deptno int);
insert into employee values (1,1),(2,1),(3,3);
SELECT d.deptname,
(SELECT COUNT(*)
FROM EMPLOYEE e
WHERE d.deptno = e.deptno ) AS total_emps
FROM DEPARTMENT d
ORDER BY total_emps ASC;
(您从DEPARTMENT
代替计数EMPLOYEE
并比较empno
代替deptno
。并且您遗漏了一个逗号。)
(您被要求提供每个部门的名称和员工人数,所以这会返回。在实践中,deptno
如果deptname
不是唯一的,我们将包括一个可能是唯一的。)
我很确定我的解决方案不正确,因为它不包括没有员工的部门。
即使您的答案版本的查询(添加了缺少的逗号)也有一个外部选择,无论子选择返回什么,它都会返回每个部门的计数。所以我不知道你为什么/如何认为它不会。
如果您想使用 LEFT (OUTER) JOIN,那么DEPARTMENT
没有员工的行会被 NULL 扩展。但是一列的 COUNT 只计算非 NULL 行。
SELECT d.deptname, COUNT(e.empno) AS total_emps
FROM DEPARTMENT d
LEFT JOIN EMPLOYEE e
ON d.deptno = e.deptno
GROUP BY d.deptno
ORDER BY total_emps ASC;
(注意 LEFT JOIN 版本使用了更多概念:LEFT JOIN 扩展 NULL、GROUP BY 和 COUNT 的 NULL 行为用于非*
。)