Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie kann man eine Rangliste on the fly aus einer MySQL-Tabelle mit Fußballergebnissen ausgeben?

Vereinen Sie zuerst die Punktetabelle, indem Sie die Heimmannschaft mit der Auswärtsmannschaft tauschen und die Torzählungen tauschen. Dadurch erhalten Sie einige Quelldaten, die leicht aggregiert werden können, und die Abfrage zum Generieren der Scorecard sieht in etwa so aus:

select 
    team, 
    count(*) played, 
    count(case when goalsfor > goalsagainst then 1 end) wins, 
    count(case when goalsagainst> goalsfor then 1 end) lost, 
    count(case when goalsfor = goalsagainst then 1 end) draws, 
    sum(goalsfor) goalsfor, 
    sum(goalsagainst) goalsagainst, 
    sum(goalsfor) - sum(goalsagainst) goal_diff,
    sum(
          case when goalsfor > goalsagainst then 3 else 0 end 
        + case when goalsfor = goalsagainst then 1 else 0 end
    ) score 
from (
    select hometeam team, goalsfor, goalsagainst from scores 
  union all
    select awayteam, goalsagainst, goalsfor from scores
) a 
group by team
order by score desc, goal_diff desc;