sql >> Databasteknik >  >> RDS >> Mysql

MySQL-fråga - sammanfoga 3 tabeller, gruppera efter en kolumn och räkna för de andra 2

Baserat på vad jag förstår är här frågan som jag 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 Members m
      ON innerQuery.memberId = m.id
      GROUP BY m.team_id
    ) inner_1
    RIGHT JOIN 
    (
      SELECT t.id, t.name, COUNT(*) membersCount
      FROM Teams t
      JOIN Members m
      ON t.id = m.team_id
      GROUP BY team_id
    ) inner_2
    ON inner_1.team_id = inner_2.id

Uppdelningen av frågan:

#1. Skaffa medlems-ID med tillhörande antal mål (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 för med den totala summan av målen (inner_1)


     SELECT m.team_id, SUM(innerQuery.goalsCount) totalCount
      FROM (
          .... Sub-query in step 1
      ) innerQuery
      JOIN Members m
      ON innerQuery.memberId = m.id
      GROUP BY m.team_id

#3. Få totalt antal medlemmar per lag (inner_2)


    SELECT t.id, t.name, COUNT(*) membersCount
      FROM Teams t
      JOIN Members m
      ON t.id = m.team_id
      GROUP BY team_id

#4. RIGHT JOIN inner_1 och inner_2 (eftersom det blir NULL) och använd IFNULL för att kontrollera och ersätta den 0


    SELECT name, membersCount, IFNULL(totalCount, 0) goalsCount FROM
    (
     .... Sub-query in step 2
    ) inner_1
    RIGHT JOIN 
    (
      .... Sub-query in step 3
    ) inner_2
    ON inner_1.team_id = inner_2.id




  1. Hur avinstallerar du MySQL från Mac OS X?

  2. SQL Server 2008 Tom sträng mot utrymme

  3. MySQL-funktion för att bestämma postnummernärhet/räckvidd

  4. Ändra MySQL-lagrade procedurens namn för 'Databas Collation'