Ciao. Scusa il ritardo ma non è mi stato possibile intervenire prima. Per capire il meccanismo della mia query devi scomporla nelle sue parti.
Parti da qui
codice:
select sq_casa as squadra,gol_casa as fatti,gol_trasferta as subiti,
case
when gol_casa > gol_trasferta then 3
when gol_casa = gol_trasferta then 1
else 0
end as punteggio
from campionato
Con questa parte della query ricavo i punteggi delle squadre che hanno giocato in casa, confronto il numero di gol fatti in casa, quelli in trasferta e assegno il relativo punteggio (3,1,0).
Nella tabellina d'esempio che ho riportato il Cagliari ha giocato due partite, una in casa, persa contro l'Inter 1-2 e una in trasferta. Eseguendo solo la query che ho riportato sopra troverai solo la partita in casa e non quella in trasferta col Genoa.
Esegui a questo punto questa query
codice:
select sq_casa as squadra,gol_casa as fatti,gol_trasferta as subiti,
case
when gol_casa > gol_trasferta then 3
when gol_casa = gol_trasferta then 1
else 0
end as punteggio
from campionato
union all
select sq_trasferta as squadra,gol_trasferta as fatti,gol_casa as subiti,
case
when gol_trasferta > gol_casa then 3
when gol_trasferta = gol_casa then 1
else 0
end as punteggio
from campionato
Noterai che il numero di record restituiti è il doppio di quella precedente in quanto vado a verificare ANCHE le partite delle squadre in trasferta. Il procedimento è lo stesso. Sempre attenendomi all'esempio del Cagliari ti troverai anche il record relativo alla vittoria in trasferta sul Genoa (gol fatti 2, subiti 0 e quindi 3 punti in più classifica).
A questo punto con
codice:
select squadra,sum(punteggio) as punteggio,sum(fatti) as fatti,sum(subiti) as subiti from(
query interna
) as tab
group by squadra
order by punteggio desc
raggruppando per squadra, non fai altro che sommare i punti delle singole partite, dei gol fatti e di quelli subiti ordinandoli in maniera decrescente.
Spero di essere stato sufficientemente chiaro.