我正在尝试设置一组简单的表格来显示锦标赛的结果 - 我有以下结构:
CREATE TABLE players(
id SERIAL PRIMARY KEY,
name TEXT);
CREATE TABLE matches(
id SERIAL PRIMARY KEY,
player_one_id INTEGER REFERENCES players,
player_two_id INTEGER REFERENCES players,
winner_id INTEGER REFERENCES players);
我已经输入了一些测试数据,如下:
INSERT INTO players (name) VALUES ('Mike Jones');
INSERT INTO players (name) VALUES ('Albert Awesome');
INSERT INTO players (name) VALUES ('Sad Sally');
INSERT INTO players (name) VALUES ('Lonely Lenny');
INSERT INTO matches (player_one_id, player_two_id, winner_id) VALUES (1,2,1);
INSERT INTO matches (player_one_id, player_two_id, winner_id) VALUES (3,4,4);
我正在尝试执行一个查询,为每个玩家提供以下结果:
id,名称,matched_won,matches_played。
到目前为止,我有以下查询:
SELECT players.id, players.name, count(matches.winner_id) as matches_won
, count(matches.id) as matches_played
FROM players left join matches
ON players.id = matches.winner_id
GROUP BY players.id
ORDER BY matches_won DESC
而且,不幸的是,我得到的输出不正确(每个玩家应该有 1 个matches_played):
id | name | matches_won | matches_played
----+----------------+-------------+----------------
4 | Lonely Lenny | 1 | 1
1 | Mike Jones | 1 | 1
2 | Albert Awesome | 0 | 0
3 | Sad Sally | 0 | 0
(4 rows)
现在,我知道这个错误输出的原因是因为加入了 player.id = matches.winner_id,但是,我的问题是:
是否可以仅通过一个左连接查询获得这些结果?如果是这样,怎么做?如果可能,我想避免进行多个查询。