簡體   English   中英

如何使用 sql 獲得分層數據結構中每個分支的總和?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM