Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

MySQL JOIN com SUM e 3 tabelas


Pontuações e eventos precisam ser integrados antes externamente juntando-os aos jogadores.

Poderíamos usar uma subconsulta ou parênteses para forçar essa "precedência" de junção específica, mas é melhor usar apenas a ordem dos JOINs no texto SQL e, em seguida, "orientar" cuidadosamente o último JOIN para os jogadores (RIGHT neste caso).

O COALESCE é apenas para converter NULLs em 0s.
SELECT
    P_Id, LastName, FirstName, COALESCE(SUM(Points), 0) TotalPoints
FROM
    Scores
    JOIN Events
        ON Event = E_Id AND Year = 2012
    RIGHT JOIN Players
        ON P_Id = Player
GROUP BY
    P_Id, LastName, FirstName
ORDER BY
    TotalPoints DESC;

Isso produz:
P_ID    LASTNAME    FIRSTNAME   TOTALPOINTS
1       Hansen      Ola         6
2       Svendson    Tove        0
3       Pettersen   Kari        0

Você pode brincar com ele neste SQL Fiddle .