左连接两个表,如果为 null 默认为 0

mel*_*dob 1 sql postgresql null join left-join

我在 postgresql 中加入了一个表和多个子查询。

在第一个连接中,我将一个包含玩家 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
Run Code Online (Sandbox Code Playgroud)

我想知道如果该列中的值出现为空,我如何自动让这个查询默认为 wins 为 0。我希望上表如下所示:

player_id |       name        | wins
-----------+-------------------+------
       500 | person 1          |    3
       501 | person 2          |    0
       502 | person 3          |    1
Run Code Online (Sandbox Code Playgroud)
  • 我打算将此作为视图,因此我看不到将列的默认值设为 0 的方法。
  • 我在 stackoverflow 和 google 上看了看,但似乎有很多关于 mysql 而不是 postgresql 的回复
  • 那些使用 postgresql 的响应对我来说似乎非常复杂。
  • 我希望这也能帮助其他有类似困难的人。

Gor*_*off 6

你使用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;
Run Code Online (Sandbox Code Playgroud)

这是 ANSI 标准 SQL,适用于大多数数据库,包括 MySQL 和 Postgres。