2017-12-03 246 views
1

我有一個表像下面:每個父及其子MySQL的退貨單

Manager是家長和下面有子資源在加入到經理人的父ID。

id | parent_id | Role  | Number of roles 

123 | 123   | Manager  | 2 

124 | 123   | Resource  | 1 

125 | 123   | Resource  | 2 

128 | 128   | Manager  | 1 

126 | 128   | Resource  | 4 

127 | 128   | Resource  | 3 

我的SQL查詢應該返回下面的結果爲每個父:

id | parent_id | Role  | Sum of manager only | Total resources 

123 | 123   | Manager  | 2    | 2+1+2 = 5 (Manager + the total number of resources for parent id 123) 

128 | 128   | Manager  | 1    | 1+4+3 = 8 (Manager + the total number of resources for parent id 128) 

任何幫助,將不勝感激。謝謝。

+0

子查詢應該是最後的選擇,因爲它會降低系統性能。 –

回答

0

我希望這會做:

SELECT 
    m1.*, m2.sum_roles 
FROM 
    managers_workers m1 
     LEFT JOIN 
    (SELECT 
     parent_id, SUM(num_of_roles) AS sum_roles 
    FROM 
     managers_workers 
    GROUP BY parent_id) AS m2 ON m1.id = m2.parent_id 
WHERE 
    m2.parent_id IS NOT NULL 
; 
0

您需要做的僅僅使用父ID自連接。如果表的名稱是「tbl_manager」

SELECT t1.id, 
    SUM(IF(t1.id = t2.id, 1,0)) AS is_manager, 
    t1.parent_id, 
    t1.Role, 
    t1.Number_of_Role AS Sum_of_manager_only, 
    IFNULL(SUM(t2.Number_of_Role),0) AS Total_resources 
FROM tbl_manager AS t1 
LEFT JOIN tbl_manager AS t2 
    ON t2.parent_id = t1.id 
GROUP BY t1.id 
HAVING is_manager; 
-1

您可以使用子查詢

select 
    (select id from mytbl where id=r.parent_id) id 
    ,r.parent_id 
    ,(select sum(NofRole) from mytbl where parent_id=r.parent_id and Role='Manager') [Sum of manager only] 
    , sum(r.nofrole) [Total resources] 
    from mytbl r 
    group by r.parent_id