Baseret på min forståelse er her den forespørgsel, jeg kommer med:
SELECT name, membersCount, IFNULL(totalCount, 0) goalsCount FROM ( SELECT m.team_id, SUM(innerQuery.goalsCount) totalCount FROM ( SELECT m.id memberId, COUNT(*) goalsCount FROM Members m JOIN Goals g ON m.id =g.member_id GROUP BY member_id ) innerQuery JOIN Medlemmer m ON innerQuery.memberId =m.id GROUP BY m.team_id ) inner_1 RIGHT JOIN ( SELECT t.id, t.name, COUNT(*) membersCount FROM Hold t JOIN Medlemmer m ON t.id =m.team_id GROUP BY team_id ) inner_2 ON inner_1.team_id =inner_2.id
Opdelingen af forespørgslen:
#1. Få medlems-id'et med dets tilhørende målantal (innerQuery)
SELECT m.id memberId, COUNT(*) goalsCount FROM Members m JOIN Goals g ON m.id =g.member_id GROUP BY member_id
#2. Få team-id'et for med den samlede SUM af målene (inner_1)
VÆLG m.team_id, SUM(innerQuery.goalsCount) totalCount FROM ( .... Underforespørgsel i trin 1 ) innerQuery JOIN Medlemmer m PÅ innerQuery.memberId =m.id GROUP BY m.team_id
#3. Få det samlede antal medlemmer pr. hold (inner_2)
VÆLG t.id, t.name, COUNT(*) membersCount FROM Teams t JOIN Members m ON t.id =m.team_id GROUP BY team_id
#4. HØJRE JOIN inner_1 og inner_2 (da der vil være NULL), og brug IFNULL til at kontrollere og erstatte det 0
SELECT name, membersCount, IFNULL(totalCount, 0) goalsCount FROM ( .... Underforespørgsel i trin 2 ) inner_1 RIGHT JOIN ( .... Underforespørgsel i trin 3 ) inner_2 ON inner_1. team_id =indre_2.id