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

Mysql 改进sql查询以选择玩家玩过的游戏数量和赢得的游戏数量,mysql,Mysql,我无法解决sql查询的一些问题 我有两张桌子: players: id, name games: id, name, player1_id, player2_id, winner_id 现在我想得到每个玩家的游戏总数和胜利数 目前,我正在使用sub-selects执行此操作: SELECT player.name AS name, (SELECT COUNT(id) FROM replays AS replay WHERE replay.player1_id = player.id OR r

我无法解决sql查询的一些问题

我有两张桌子:

players: id, name
games: id, name, player1_id, player2_id, winner_id
现在我想得到每个玩家的游戏总数和胜利数

目前,我正在使用sub-selects执行此操作:

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或游戏少于smth的玩家

您对如何改进此查询有何想法


提前谢谢。

试试这样的方法:

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

非常感谢您的回答。但是如果我想添加搜索值,例如,我想选择所有赢得超过10场比赛的球员,该怎么办?要添加搜索值,您需要HAVING子句: