sql >> Database teknologi >  >> RDS >> Mysql

MySQL-forespørgsel - sæt 3 tabeller sammen, grupper efter én kolonne og tæl for de 2 andre

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


  1. Hvad er MariaDB Enterprise Cluster?

  2. Oracle:betyder kolonnerækkefølgen noget i et indeks?

  3. Opsætning af en geo-distribueret databaseklynge ved hjælp af MySQL-replikering

  4. Hvordan henter jeg hver N'te post fra en tabel?