在group by子句postgresql中将null值返回为'0'

时间:2011-04-18 10:20:37

标签: sql postgresql aggregate-functions

我正在使用countgroup by来了解每天有多少订阅者购物:

select count(s.email) 
from subscriptions s, orders o 
where o.subcription_id=s.id 
group by s.created_at

结果:

created_at  count
------------------
04-04-2011  1
06-04-2011  2
07-04-2011  1
10-04-2011  5
11-04-2011  9

但是我仍然希望空行返回为'0'。我该怎么做呢?请注意,我必须使用表格的两个

created_at  count
------------------
04-04-2011  1
05-04-2011  0
06-04-2011  2
07-04-2011  1
08-04-2011  0
09-04-2011  0
10-04-2011  5
11-04-2011  9

2 个答案:

答案 0 :(得分:7)

SELECT  s.created_at, COUNT(o.subsription_id)
FROM    subscriptions s
LEFT JOIN
        orders o
ON      o.subcription_id = s.id
GROUP BY
        s.created_at

答案 1 :(得分:2)

count()函数总是返回一个值(即使它是零),问题是你的一个表缺少相应的行。您需要执行外部联接以包含两个表中的行。请检查哪些表缺少行,然后放置外部联接以包括另一个表中的所有行。

SELECT s.created_at, COUNT(o.subscription_id)
FROM   subscriptions s
LEFT OUTER JOIN order o //(Depending on situation, it can be RIGHT OUTER JOIN)
ON (s.id = o.subscription_id)
GROUP BY s.created_at

如果您仍然遇到问题,请发布您的表格数据。