postgresql用“NULL”替换0

时间:2013-11-30 15:26:36

标签: sql postgresql

我想用输出中的空(NULL)值替换行的0值。 我在选择中使用子查询,但我并不完全清楚如何做到这一点。 这是我到目前为止的查询:

select spelersnr, (select count(bedrag) from boetes where boetes.spelersnr = S.spelersnr
) as aantalboetes

from spelers S inner join wedstrijden using(spelersnr)
left join boetes using(spelersnr)
group by spelersnr


order by aantalboetes asc, spelersnr asc

此外,我首先需要按升序排序非NULL的所有值,然后是空值。

谢谢!

2 个答案:

答案 0 :(得分:4)

使用NullIf()函数替换值为null很简单。通常,它将用于避免被零除错误......

numerator/NullIf(denominator,0)

...因此除以零会导致null。

在您的情况下,您可以将其应用于计数(*):

NullIf(count(*),0)

答案 1 :(得分:2)

我认为你不需要子查询。以下内容应该做同样的事情,因为您已经通过用于聚合和相关子查询的相同列加入boetes表:

select spelersnr, count(bedrag) as aantalboetes
from spelers S inner join
     wedstrijden
     using(spelersnr) left join
      boetes using(spelersnr)
group by spelersnr
order by aantalboetes asc, spelersnr asc;

使用此查询,您可以执行以下操作:

select spelersnr,
       (case when count(bedrag) > 0 then count(bedrag) end) as aantalboetes
from spelers S inner join
     wedstrijden
     using(spelersnr) left join
      boetes using(spelersnr)
group by spelersnr
order by aantalboetes asc, spelersnr asc;

实际上,您可以在您的版本中添加相同的case

select spelersnr,
       (select (case when count(bedrag) > 0 then count(bedrag) end)
        from boetes
        where boetes.spelersnr = S.spelersnr
       ) as aantalboetes

但相关的子查询是不必要的。

对于订单,只需:

order by count(*) desc

您可以按select语句中未包含的列进行排序,这是您正在寻找的逻辑。