我有桌子
Dept
DEPTNO DNAME LOC
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
和另一个表
Emp
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
7369 SMITH CLERK 7902 12/17/1980 800 NULL 20
7499 ALLEN SALESMAN 7698 2/20/1981 1600 300 30
7521 WARD SALESMAN 7698 2/22/1981 1250 500 30
7566 JONES MANAGER 7839 4/2/1981 2975 NULL 20
7654 MARTIN SALESMAN 7698 9/28/1981 1250 1400 30
7698 BLAKE MANAGER 7839 5/1/1981 2850 NULL 30
7782 CLARK MANAGER 7839 6/9/1981 2450 NULL 10
7788 SCOTT ANALYST 7566 12/9/1982 3000 NULL 20
7839 KING PRESIDENT NULL 11/17/1981 5000 NULL 10
7844 TURNER SALESMAN 7698 9/8/1981 1500 0 30
7876 ADAMS CLERK 7788 1/12/1983 1100 NULL 20
7900 JAMES CLERK 7698 12/3/1981 950 NULL 30
7902 FORD ANALYST 7566 12/3/1981 3000 NULL 20
7934 MILLER CLERK 7782 1/23/1982 1300 NULL 10
我的问题:列出所有部门名称及其员工人数。计数应仅包括雇用日期大于1981年的雇员
结果:应该是这样的
DNAME EMPCOUNT
ACCOUNTING 1
OPERATIONS 0
RESEARCH 2
SALES 0
答案 0 :(得分:2)
SELECT dname,
SUM(CASE WHEN emp.hierdate > '1981/01/01' THEN 1 ELSE 0 END)
FROM dept
LEFT JOIN emp ON dept.deptno = emp.empno
GROUP BY dname
答案 1 :(得分:1)
试试这段代码:
SELECT Dept.DNAME, COUNT(Emp.EMPNO)
FROM Dept LEFT JOIN Emp ON Dept.DEPTNO = Emp.DEPTNO
WHERE Emp.HIREDATE > '1981/01/01'
GROUP BY Dept.DNAME
答案 2 :(得分:1)
为了让部门拥有0个匹配的员工,这需要一些技巧
SELECT Dept.DNAME, COALESCE(t.cnt, 0) AS count
FROM Dept
LEFT JOIN ( SELECT deptno, count(*)
FROM Emp
WHERE HIREDATA > '1981/01/01'
GROUP BY deptno) as t
ON t.deptno = Dept.deptno
答案 3 :(得分:0)
首先,了解如何加入(了解inner join
,left join
和right join
)。
一旦你有了这个,你应该能够写出这样的查询:
-- First example
select dept.dname, count(emp.empId)
from dept left join emp on dept.deptNo = emp.deptNo
group by dept.dname;
或者这个:
-- Second example
select dept.dname, sum(case when emp.empId is not null then 1 else 0 end)
from dept left join emp on dept.deptNo = emp.deptNo
group by dept.dname;