我想用输出中的空(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的所有值,然后是空值。
谢谢!
答案 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
语句中未包含的列进行排序,这是您正在寻找的逻辑。