Sql 按树形结构计算公司中的人数
您好,我有一个包含公司id(PK)和父公司id(FK)列的结构表,以及包含公司id(FK)和人员id(PK)的人员表。有些人可能在不同的公司。我想数一数每个公司的数量,包括孩子Sql 按树形结构计算公司中的人数,sql,oracle,hierarchical-data,recursive-query,Sql,Oracle,Hierarchical Data,Recursive Query,您好,我有一个包含公司id(PK)和父公司id(FK)列的结构表,以及包含公司id(FK)和人员id(PK)的人员表。有些人可能在不同的公司。我想数一数每个公司的数量,包括孩子 +------------------+-------------------------+ | companies_id(PK) | parent_companies_id(FK) | +------------------+-------------------------+ | 101 |
+------------------+-------------------------+
| companies_id(PK) | parent_companies_id(FK) |
+------------------+-------------------------+
| 101 | null |
| 102 | 101 |
| 103 | 101 |
| 104 | 103 |
| 105 | 103 |
| 106 | 104 |
+------------------+-------------------------+
+---------------+------------------+
| people_id(PK) | companies_id(FK) |
+---------------+------------------+
| 001 | 101 |
| 002 | 102 |
| 003 | 102 |
| 004 | 104 |
| 005 | 105 |
| 006 | 106 |
+---------------+------------------+
CREATE TABLE COMPANY
( Company_ID Integer,
Parent_ID Integer
);
CREATE TABLE PEOPLE
( People_ID VARCHAR(3),
Company_ID Integer
);
INSERT INTO COMPANY VALUES (101,NULL);
INSERT INTO COMPANY VALUES (102,101);
INSERT INTO COMPANY VALUES (103,101);
INSERT INTO COMPANY VALUES (104,103);
INSERT INTO COMPANY VALUES (105,103);
INSERT INTO COMPANY VALUES (106,104);
INSERT INTO PEOPLE VALUES ('001',101);
INSERT INTO PEOPLE VALUES ('002',102);
INSERT INTO PEOPLE VALUES ('003',102);
INSERT INTO PEOPLE VALUES ('004',104);
INSERT INTO PEOPLE VALUES ('005',105);
INSERT INTO PEOPLE VALUES ('006',106);
结果必须是下一个
+--------------+------------+
| companies_id | people_qnt |
+--------------+------------+
| 101 | 6 |
| 102 | 2 |
| 103 | 3 |
| 104 | 2 |
| 105 | 1 |
| 106 | 1 |
+--------------+------------+
这里我假设您的
结构表(我称之为“struct”)为每个公司都有一行。如果不是这样,你应该在驾驶台上使用不同的东西
select struct.companies_id, count(people_id)
from struct
inner join people on people.companies_id in
(select s2.companies_id
from struct s2
start with s2.companies_id = struct.companies_id
connect by prior s2.companies_id = s2.parent_companies_id)
group by struct.companies_id
order by 1
;
你用的是什么数据库管理系统?@D-Shih我用的是Oracle