Ich bin auf der Suche nach einer besseren Möglichkeit, die folgende Abfrage auszuführen. Ich habe eine Tabelle, die wie folgt aussieht:SQL Help: Zählen von Zeilen in einer einzelnen Abfrage mit einem geschachtelten SELECT
game_id | home_team_id | away_team_id
1 | 100 | 200
2 | 200 | 300
3 | 200 | 400
4 | 300 | 100
5 | 100 | 400
Und ich möchte eine Abfrage schreiben, die die Anzahl der Heimspiele zählt und Auswärtsspiele für jedes Team und gibt die folgenden:
team_id | home_games | away_games
100 | 2 | 1
200 | 2 | 1
300 | 1 | 1
400 | 0 | 2
Gerade jetzt Ich habe dieses Monstrum geschrieben, das funktioniert, aber es ist langsam (ich weiß, dass es die ganze 2.800 Reihe zweimal vom Tisch zieht).
SELECT
home_team_id as team_id,
(SELECT count(*) FROM `game` WHERE home_team_id = temp_game.home_team_id) as home_games,
(SELECT count(*) FROM `game` WHERE home_team_id = temp_game.away_team_id) as away_games
FROM (SELECT * FROM `game`) as temp_game
GROUP BY home_team_id
Kann ein SQL-Guru mir helfen, einen besseren Weg, Knock-out? Ich denke mein Problem ist, dass ich nicht verstehe, wie man eine eindeutige Liste der Team-IDs erhält, die bei den Zählungsabfragen geworfen werden. Ich wette, es gibt einen besseren Weg mit einem besser platzierten, verschachtelten SELECT. Danke im Voraus!
Vielen Dank für die große Hilfe. Am Ende entschied ich, dass es dumm war, zu überarbeiten und ging mit Frank Flynn's 2-Tisch-Ansatz (fügte eine Team-Tabelle hinzu und schloss sich ihnen an). – Greg