【问题标题】:Return null value as '0' in group by clause, postgresql在group by子句postgresql中将空值返回为'0'
【发布时间】:2011-04-18 10:20:37
【问题描述】:

我正在使用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

【问题讨论】:

    标签: sql postgresql aggregate-functions


    【解决方案1】:
    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
    

    【讨论】:

    • 嗨 Quassnoi,如果订单表与其他表直接相关,例如优惠券表,该怎么办。我应该将优惠券表放在查询中的什么位置?
    【解决方案2】:

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

    SELECT s.created_at, COUNT(o.subscription_id) FROM 订阅 LEFT OUTER JOIN order o //(根据情况,可以是RIGHT OUTER JOIN) 开(s.id = o.subscription_id) GROUP BY s.created_at

    如果您还有问题,请发布您的表格数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-31
      • 1970-01-01
      • 2021-11-13
      • 2017-01-24
      • 1970-01-01
      • 1970-01-01
      • 2016-04-03
      相关资源
      最近更新 更多