Mysql 改进sql查询以选择玩家玩过的游戏数量和赢得的游戏数量
我无法解决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
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子句: