【发布时间】:2021-03-05 14:24:02
【问题描述】:
对于标题的含糊之处,我深表歉意。如果有人在阅读本文后有更好的建议,我会优雅地更改它。
我有 2 张桌子:
DEPT 表(部门):
|IDDEPT | DEPTNAME |
--------+------------+
| 10 | ACCOUNTING |
| 20 | RESEARCH |
| 30 | OPERATIONS |
--------+------------+
EMP 表(员工):
| IDEMP | EMPNAME | MGR | IDDEPT |
--------+-----------+-------+--------+
| 7001 | SMITH | 7007 | 10 |
| 7002 | ALLEN | 7006 | 10 |
| 7003 | WARD | 7006 | 20 |
| 7004 | JONES | 7006 | 20 |
| 7005 | MARTIN | 7007 | 10 |
| 7006 | BLAKE | 7008 | 20 |
| 7007 | FORD | 7008 | 10 |
| 7008 | KING | NULL | 10 |
--------+-----------+-------+--------+
MGR 列是员工的经理标识符。 KING 为 NULL,因为他是公司的董事。 EMP 表上的 IDDEPT 是员工所属的部门。
我想要做的是,对于每个经理(在这种情况下为 KING、FORD 和 BLAKE),显示他们在每个部门(10、20 和 30)监督的员工数量。
对于这个给定的场景,我试图获得的输出(不是严格的这个顺序)如下:
| IDEMP | EMPNAME | IDDEPT | N_EMPLOYEES_SUPERVISED |
--------+-----------+--------+--------------------------+
| 7006 | BLAKE | 10 | 1 |
| 7006 | BLAKE | 20 | 2 |
| 7006 | BLAKE | 30 | 0 |
| 7007 | FORD | 10 | 2 |
| 7007 | FORD | 20 | 0 |
| 7007 | FORD | 30 | 0 |
| 7008 | KING | 10 | 1 |
| 7008 | KING | 20 | 1 |
| 7008 | KING | 30 | 0 |
--------+-----------+--------+--------------------------+
但是,我无法输出计数为 0 的行。
【问题讨论】:
-
定义:如果对于基础集合中的每个 x,x 都与自身相关,则关系是 自反 .显然你的关系是不是自反的。除此之外 - 通常部门负责人“监督”该部门的所有员工,而不仅仅是那些直接向他或她报告的员工。您是否只需要每个部门的直接报告数量?
-
对。是的,这是我自己为改进 SQL 所做的一项个人任务。我是这么想的,但可能完全像你现在的样子。
标签: sql oracle count left-join inner-join