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

MySQL JOIN con SUM e 3 tabelle

I punteggi e gli eventi devono essere collegati internamente prima unendoli all'esterno ai giocatori.

Potremmo usare una sottoquery o delle parentesi per forzare questa particolare "precedenza" di join, ma è più carino usare semplicemente l'ordine dei JOIN nel testo SQL, e quindi "orientare" attentamente l'ultimo JOIN ai giocatori (DESTRA in questo caso).

COALESCE serve solo per convertire NULL in 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;

Questo produce:

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

Puoi giocarci in questo SQL Fiddle .