2017-12-03 5 views
1

私は以下のようなテーブルを持っています:MySQLは各親とその子のリストを返します

マネージャはマネージャであり、マネージャの親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 
関連する問題