psql table 正在查询

psql table querying

我有 3 tables,球员,比赛,胜利。我想做一个查询来检索玩家 ID、姓名、他参加的比赛数量以及他获得了多少胜利。

比赛 table 记录它所在的回合,参加的玩家(p_one_id 和 p_two_id)而获胜 table 记录比赛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 ,至少据我所知不是)。有人知道我的结果需要什么查询吗?

用户外连接。您正在使用的连接语法正在消除玩家,除非他们既有胜利又有比赛。

SELECT players.id, players.name, 
       COUNT(matches.p_one_id) as matches, 
       COUNT(wins.p_id) AS wins 
FROM players
LEFT JOIN matches
 on matches.p_one_id = players.id 
LEFT JOIN wins 
 on wins.p_id = players.id 
GROUP BY players.i, players.name

这将 return 所有玩家、比赛和胜利。

我建议使用 LEFT JOIN 而不是交叉连接/where 子句选项。您可能还希望计算玩家所在的比赛 "player 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