sql >> Base de Datos >  >> RDS >> Mysql

MySQL JOIN con SUM y 3 tablas

Las partituras y los eventos deben unirse internamente antes uniéndolos externamente a los jugadores.

Podríamos usar una subconsulta o paréntesis para forzar la "precedencia" de esta unión en particular, pero es mejor usar el orden de las UNIONES en el texto SQL y luego "orientar" con cuidado la última ÚNICA a los jugadores (DERECHA en este caso).

COALESCE es solo para convertir NULL a 0.

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;

Esto produce:

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

Puedes jugar con él en este SQL Fiddle .