改进sql查询以选择玩游戏的数量和玩家赢得的游戏数量

时间:2010-11-11 16:26:08

标签: mysql

我遇到了一些我无法解决的SQL查询问题。

我有两张桌子:

players: id, name
games: id, name, player1_id, player2_id, winner_id

现在我希望获得每位玩家的总赌博数量和胜利。

目前我正在选择子选项:

SELECT player.name AS name, 
(SELECT COUNT(id) FROM replays AS replay WHERE replay.player1_id = player.id OR replay.player2_id = player.id) AS games,
(SELECT COUNT(id) FROM replays AS replay WHERE replay.winner_id = player.id) AS wins
FROM players AS player

但首先它非常缓慢。 而且我无法进行复杂的搜索查询,例如搜索胜利超过smth或游戏少的玩家。

您有什么想法如何改进此查询?

提前谢谢。

1 个答案:

答案 0 :(得分:1)

尝试这样的事情:

select a.player_id, p.name, count(*) as GamesCount, 
    count(case when g.winner_id = a.player_id then 1 end) as WinsCount
from (
    select player1_id as player_id
    from games 
    union
    select player2_id as player_id
    from games 
) a
inner join games g on a.player_id = g.player1_id 
    or a.player_id = g.player2_id 
inner join players p on a.player_id = p.id
group by a.player_id, p.name