【发布时间】:2009-01-07 20:33:18
【问题描述】:
我正在寻找一种更好的方法来执行以下查询。我有一个看起来像这样的表:
game_id | home_team_id | away_team_id
1 | 100 | 200
2 | 200 | 300
3 | 200 | 400
4 | 300 | 100
5 | 100 | 400
我想编写一个查询,计算每支球队的主场和客场比赛的数量,并输出以下内容:
team_id | home_games | away_games
100 | 2 | 1
200 | 2 | 1
300 | 1 | 1
400 | 0 | 2
现在,我编写了这个可以运行的怪物,但速度很慢(我知道它会将整个 2,800 行从表中拉出两次)。
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
SQL 大师能帮我找出更好的方法吗?我认为我的问题是我不明白如何获得一个不同的团队 ID 列表来抛出计数查询。我敢打赌,有一个更好的方法可以放置更好的嵌套 SELECT。提前致谢!
【问题讨论】:
-
感谢您的大力帮助。最后,我认为过度设计是愚蠢的,并采用了弗兰克弗林的 2 表方法(添加一个团队表并加入他们)。
标签: sql