组合两个表中的数据并进行分组的一个查询(SQL、Oracle)

fbcarpbf  于 2022-12-22  发布在  Oracle
关注(0)|答案(2)|浏览(211)

我试图编写一个视图,它在一个查询中显示每个位置(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;
tct7dpnv

tct7dpnv1#

你首先需要把它们连接起来然后然后再聚合起来-

SELECT D.LOC, COUNT(DISTINCT DEPTNO) NO_DEP, COUNT(EMPNO) NO_EMP
  FROM DEPT D
  JOIN EMP E ON D.DEPTNO = E.DEPTNO
 GROUP BY D.LOC;
zwghvu4y

zwghvu4y2#

可以使用"group by"和"having"来解决此类查询
聚合函数使用HAVING子句而不是WHERE子句。GROUP BY子句将具有相同值的行分组到汇总行中。having子句与where子句一起使用,以便查找具有特定条件的行。having子句始终用在group BY子句之后。
示例:

select D.LOC AS LOC, COUNT(D.DEPTNO) AS NO_DEP, COUNT(distinct E.EMPNO) AS NO_EMP
from Dept D, Emp E
where D.DEPTNO=E.DEPTNO
group by D.LOC;

相关问题