Estoy buscando una mejor manera de hacer la siguiente consulta. Tengo una tabla que tiene este aspecto:Ayuda de SQL: contar filas en una sola consulta con un anidado SELECCIONAR
game_id | home_team_id | away_team_id
1 | 100 | 200
2 | 200 | 300
3 | 200 | 400
4 | 300 | 100
5 | 100 | 400
Y quiero escribir una consulta que cuenta el número de juegos en casa y fuera de juegos para cada equipo y emite la siguiente:
team_id | home_games | away_games
100 | 2 | 1
200 | 2 | 1
300 | 1 | 1
400 | 0 | 2
este momento , Escribí esta monstruosidad que funciona, pero es lenta (sé que está sacando las 2.800 filas de la mesa dos veces).
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
¿Puede un gurú de SQL ayudarme a noquear de una mejor manera? Creo que mi problema es que no entiendo cómo obtener una lista distinta de las identificaciones del equipo para arrojar al conteo de las consultas. Apuesto a que hay una mejor manera con un SELECT mejor ubicado y anidado. ¡Gracias por adelantado!
Gracias por su gran ayuda. Al final, decidí que era una tontería sobre-diseñar y fui con el enfoque de 2 mesas de Frank Flynn (agregando una mesa de equipo y uniéndome a ellos). – Greg