我有 3 张牌 table 、玩家、比赛、胜利。我想做一个查询来检索玩家 ID、姓名、他参加的比赛数量以及他获得的胜利次数。
比赛表跟踪其所在的回合、参加比赛的玩家(p_one_id 和 p_two_id),而胜利表则跟踪比赛 ID,以查看他战胜的对手以及玩家 ID。
如果我愿意
SELECT players.id, players.name, COUNT(matches.*) as matches FROM players, matches WERE matches.p_one_id = players.id GROUP BY players.id
它工作得很好,至少从我的基本测试来看(但这并不检查胜利),但如果我这样做
SELECT players.id, players.name, COUNT(matches.*) as matches, COUNT(wins.*) AS wins FROM players, matches, wins WERE matches.p_one_id = players.id AND wins.p_id = players.id GROUP BY players.id
我什么也没得到,一个原因是没有获胜,但是我只能得到获胜的人,我也不能进行子查询,因为我不能在子查询中使用玩家ID,在至少据我所知不是)。有人知道我的结果需要什么查询吗?
最佳答案
我建议使用 LEFT JOIN 而不是交叉连接/where 子句选项。您可能还希望计算玩家为“玩家 2”的比赛。大致如下:
SELECT
p.id,
p.name,
count(m1.*) + count(m2.*) as matches,
count(w.*) as wins
FROM players p
LEFT JOIN matches m1
ON m.p_one_id = p.id
LEFT JOIN matches m2
on m.p_two_id = p.id
LEFT JOIN wins w
ON w.p_id = p.id
GROUP BY p.id, p.name
关于mysql - psql表查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29905664/