nicht von dem langen Post verschrecken lassen, die eigentliche Frage ist recht simpel. ;) Habe für eine Webanwendung eine SQL-Datenbank mit u.a. diesen beiden Tabellen.
gameID gameDay gameHomeTeamID gameAwayTeamID gameHomeTeamScore gameAwayTeamScore gameTime
Mithilfe dieser beiden Tabellen möchte ich jetzt eine Tabelle der Mannschaften erstellen. Im Grunde ja nix schwieriges, allerdings wird der Befehl da schnell extrem lang (s.u.). Im Grunde würde ich nur gerne wissen, welche Möglichkeiten es gibt, solche mehrfach abgeleiteten Abfragen etwas kompakter zu gestalten. Würde mich über jeden Tipp freuen.
SELECT teamID, teamName, homegamenumber, awaygamenumber, NULL(homegamenumber,0)+IFNULL(awaygamenumber,0) AS gamenumber,
homegamewins, awaygamewins, IFNULL(homegamewins,0) + IFNULL(awaygamewins,0) AS gamewins,
homegamedraws, awaygamedraws, IFNULL(homegamedraws,0) + IFNULL(awaygamedraws,0) AS gamedraws,
homegamelost, awaygamelost, IFNULL(homegamelost,0) + IFNULL(awaygamelost,0) AS gamelost,
3*(IFNULL(homegamewins,0) + IFNULL(awaygamewins,0)) + IFNULL(homegamedraws,0) + IFNULL(awaygamedraws,0) AS points,
homegoalsscored, homegoalsconceded, awaygoalsscored, awaygoalsconceded,
IFNULL(homegoalsscored,0) + IFNULL(awaygoalsscored,0) AS goalsscored,
IFNULL(homegoalsconceded,0) + IFNULL(awaygoalsconceded,0) AS goalsconceded,
IFNULL(homegoalsscored,0) + IFNULL(awaygoalsscored,0) - IFNULL(homegoalsconceded,0) - IFNULL(awaygoalsconceded,0) AS goaldifference
FROM tip1_teams
LEFT JOIN (SELECT Count(*) AS homegamenumber, gameHomeTeamID FROM tip1_games GROUP BY gameHomeTeamID)A ON A.gameHomeTeamID = tip1_teams.teamID
LEFT JOIN (SELECT Count(*) AS awaygamenumber, gameAwayTeamID FROM tip1_games GROUP BY gameAwayTeamID)B ON B.gameAwayTeamID = tip1_teams.teamID
LEFT JOIN (SELECT Count(*) AS homegamewins, gameHomeTeamID, gameHomeTeamScore, gameAwayTeamScore FROM tip1_games WHERE gameHomeTeamScore > gameAwayTeamScore GROUP BY gameHomeTeamID)C ON C.gameHomeTeamID = tip1_teams.teamID
LEFT JOIN (SELECT Count(*) AS awaygamewins, gameAwayTeamID, gameHomeTeamScore, gameAwayTeamScore FROM tip1_games WHERE gameHomeTeamScore < gameAwayTeamScore GROUP BY gameAwayTeamID)D ON D.gameAwayTeamID = tip1_teams.teamID
LEFT JOIN (SELECT Count(*) AS homegamedraws, gameHomeTeamID, gameHomeTeamScore, gameAwayTeamScore FROM tip1_games WHERE gameHomeTeamScore = gameAwayTeamScore GROUP BY gameHomeTeamID)E ON E.gameHomeTeamID = tip1_teams.teamID
LEFT JOIN (SELECT Count(*) AS awaygamedraws, gameAwayTeamID, gameHomeTeamScore, gameAwayTeamScore FROM tip1_games WHERE gameHomeTeamScore = gameAwayTeamScore GROUP BY gameAwayTeamID)F ON F.gameAwayTeamID = tip1_teams.teamID
LEFT JOIN (SELECT Count(*) AS homegamelost, gameHomeTeamID, gameHomeTeamScore, gameAwayTeamScore FROM tip1_games WHERE gameHomeTeamScore < gameAwayTeamScore GROUP BY gameHomeTeamID)G ON G.gameHomeTeamID = tip1_teams.teamID
LEFT JOIN (SELECT Count(*) AS awaygamelost, gameAwayTeamID, gameHomeTeamScore, gameAwayTeamScore FROM tip1_games WHERE gameHomeTeamScore > gameAwayTeamScore GROUP BY gameAwayTeamID)H ON H.gameAwayTeamID = tip1_teams.teamID
LEFT JOIN (SELECT gameHomeTeamID, gameHomeTeamScore AS homegoalsscored FROM tip1_games GROUP BY gameHomeTeamScore)I ON I.gameHomeTeamID = tip1_teams.teamID
LEFT JOIN (SELECT gameHomeTeamID, gameAwayTeamScore AS homegoalsconceded FROM tip1_games GROUP BY gameAwayTeamScore)J ON J.gameHomeTeamID = tip1_teams.teamID
LEFT JOIN (SELECT gameAwayTeamID, gameAwayTeamScore AS awaygoalsscored FROM tip1_games GROUP BY gameAwayTeamScore)K ON K.gameAwayTeamID = tip1_teams.teamID
LEFT JOIN (SELECT gameAwayTeamID, gameHomeTeamScore AS awaygoalsconceded FROM tip1_games GROUP BY gameHomeTeamScore)L ON L.gameAwayTeamID = tip1_teams.teamID
GROUP BY teamID
ORDER BY points DESC, goaldifference DESC