2017-05-07 178 views
0

我要在postgresql中加入一个表和多个子查询。左连接两个表,如果null默认为0

在其中一个第一次加入中,我加入了一个表格,其中包含一个玩家id和名称列表,以选择与其关联的胜出的子查询。但是有些球员还没有取得胜利。

下面是查询和输出:

select players.player_id, players.name, b.wins 
from players 
left join 
(select winner, count(winner) as wins from outcomes group by winner) b 
on players.player_id = b.winner; 


player_id |  name  | wins 
-----------+-------------------+------ 
     500 | person 1   | 3 
     501 | person 2   | 
     502 | person 3   | 1 

我想知道如何,如果该列中的值出现为空,我可以自动拥有此查询默认为胜为0。我想上面的表格看起来像这样:

player_id |  name  | wins 
-----------+-------------------+------ 
     500 | person 1   | 3 
     501 | person 2   | 0 
     502 | person 3   | 1 
  • 我打算做这样的观点,所以我不明白的方式,使列的默认值0。
  • 我已经浏览了一下stackoverflow和google,但似乎有很多mysql的响应,但不是postgresql
  • 这些使用postgresql的响应对我来说似乎非常复杂。
  • 我希望这也能帮助其他有类似困难的人。

回答

0

您使用coalesce()

select p.player_id, p.name, coalesce(w.wins , 0) as wins 
from players p left join 
    (select winner, count(winner) as wins 
     from outcomes 
     group by winner 
    ) w 
    on p.player_id = w.winner; 

这是ANSI标准的SQL,并会在大多数数据库工作,包括MySQL的和Postgres。

+0

很完美!谢谢! – meldob