我试图编写一个视图,它在一个查询中显示每个位置(Loc)的部门数量和在这些部门工作的雇员数量。
下表列出。
表部门
| 部门编号|域名|LOC语言|
| - ------|- ------|- ------|
| 十个|会计|纽约|
| 二十个|研究|达拉斯|
| 三十|销售|芝加哥|
| 四十|业务|波士顿|
| 五十|风险|波士顿|
工作台员工
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
9901 Kowalski SALESMAN 9345 23-JAN-90 300 100 12
7369 SMITH CLERK 7902 17-MAR-80 15355.58 20
7499 ALLEN SALESMAN 7698 20-MAR-81 1600 300 30
7521 WARD SALESMAN 7698 22-MAR-81 1250 500 30
7566 JONES MANAGER 7839 02-MAR-81 57103.26 20
7654 MARTIN SALESMAN 7698 28-MAR-81 1250 1400 30
7698 BLAKE MANAGER 7839 01-MAR-81 2850 30
7782 CLARK MANAGER 7839 09-MAR-81 2450 10
7788 SCOTT ANALYST 7566 09-MAR-82 57583.15 20
7839 KING PRESIDENT 17-MAR-81 5000 10
7844 TURNER SALESMAN 7698 08-MAR-81 1500 0 30
7876 ADAMS CLERK 7788 12-MAR-83 21113.82 20
7900 JAMES CLERK 7698 03-MAR-81 950 30
7902 FORD ANALYST 7566 03-MAR-81 57583.15 20
7934 MILLER CLERK 7782 23-MAR-82 1300 10
输出应为
LOC NO_DEP NO_EMP
------------- ---------- ----------
NEW YORK 1 3
DALLAS 1 1
CHICAGO 1 5
BOSTON 2 6
到目前为止,我能够创建两个单独的查询,下面提供了这两个查询,并给出了这个结果,但我必须在一个查询中完成,这将在一个表中给出输出。
SELECT DISTINCT d.Loc, Count(d.Deptno) AS No_Dep, d.Deptno
FROM Dept d
GROUP BY d.Loc, d.Deptno;
SELECT DISTINCT COUNT(e.Empno) OVER (PARTITION BY e.Deptno) AS No_Emp, e.Deptno
FROM Emp e;
正确的解决方案是
SELECT d.LOC, COUNT(DISTINCT d.DEPTNO) AS NO_DEP, COUNT(e.EMPNO) AS NO_EMP
FROM DEPT d
LEFT JOIN EMP e ON d.DEPTNO = e.DEPTNO
GROUP BY D.LOC;
2条答案
按热度按时间tct7dpnv1#
你首先需要把它们连接起来然后然后再聚合起来-
zwghvu4y2#
可以使用"group by"和"having"来解决此类查询
聚合函数使用HAVING子句而不是WHERE子句。GROUP BY子句将具有相同值的行分组到汇总行中。having子句与where子句一起使用,以便查找具有特定条件的行。having子句始终用在group BY子句之后。
示例: