[英]How to get the sum of each branch in hierarchical data structure with sql?
我有下一個樹結構:
這個結構在數據庫中用下一個表表示:
--------------------------------Employees-------------------------------------------
-------------------------------------------------------------------------------------
| Employee_name | Global_Team | Team |
-------------------------------------------------------------------------------------
|name_of_head_of_engineering | - | Engineering |
-------------------------------------------------------------------------------------
|name_1_T1 | Engineering | Team_1 |
-------------------------------------------------------------------------------------
|name_2_T1 | Engineering | Team_1 |
-------------------------------------------------------------------------------------
|name_3_T1 | Engineering | Team_1 |
-------------------------------------------------------------------------------------
|name_4_T1 | Engineering | Team_1 |
-------------------------------------------------------------------------------------
|name_5_T1 | Engineering | Team_1 |
-------------------------------------------------------------------------------------
|name_2_T2 | Engineering | Team_2 |
-------------------------------------------------------------------------------------
|name_1_T2_1 | Team_2 | 2_Team_1 |
-------------------------------------------------------------------------------------
|name_2_T2_1 | Team_2 | 2_Team_1 |
-------------------------------------------------------------------------------------
|name_1_T2_2 | Team_2 | 2_Team_2 |
-------------------------------------------------------------------------------------
|name_2_T2_2 | Team_2 | 2_Team_2 |
-------------------------------------------------------------------------------------
|name_3_T2_2 | Team_2 | 2_Team_2 |
-------------------------------------------------------------------------------------
我需要每個團隊的員工人數,結果應該是這樣的:
--------------------------------------------------------------------
| Team | count_employee |
--------------------------------------------------------------------
| Engineering | 11 |
--------------------------------------------------------------------
| Team_1 | 5 |
--------------------------------------------------------------------
| Team_2 | 6 |
--------------------------------------------------------------------
| 2_Team_1 | 2 |
--------------------------------------------------------------------
| 2_Team_2 | 3 |
--------------------------------------------------------------------
我試過:
Select Team, count(employee_name), from Employees Group by Team
我得到了這些結果:
--------------------------------------------------------------------
| Team | count_employee |
--------------------------------------------------------------------
| Engineering | 1 |
--------------------------------------------------------------------
| Team_1 | 5 |
--------------------------------------------------------------------
| Team_2 | 1 |
--------------------------------------------------------------------
| 2_Team_1 | 2 |
--------------------------------------------------------------------
| 2_Team_2 | 3 |
--------------------------------------------------------------------
更具體地說,如果我們從頂部的“工程”開始,我們應該得到它下面或里面的所有員工的數量,以及團隊和子團隊的數量。
我應該指出,您的表結構並非旨在實現層次結構樹。 例如,如果您刪除name_2_T2, Engineering, Team_2
,則Team_2
及其所有員工對於Engeneering
團隊都將丟失。
但是如果你想用這個樣本數據統計每個團隊的員工人數,這里是你需要的查詢
SELECT DISTINCT
e.team,
(
WITH RECURSIVE cte AS (
SELECT
ee.team,
ee.global_team
FROM employees ee
WHERE ee.team = e.team
UNION ALL
SELECT
ee.team,
ee.global_team
FROM employees ee
JOIN cte ON ee.global_team = cte.team
)
SELECT COUNT(*) FROM cte WHERE global_team IS NOT NULL
) AS count_employee
FROM employees e
ORDER BY count_employee DESC
Output
團隊 | count_employee |
---|---|
工程 | 11 |
Team_2 | 6 |
Team_1 | 5 |
2_團隊_2 | 3 |
2_團隊_1 | 2 |
您可以在此處查看工作演示
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.