使用Have子句计算行数

时间:2019-06-22 18:05:39

标签: sql postgresql

我要实现的3个表是为两种查询计算确切的行数。

第一个帐户必须计算在帐户accounts_extra中仅确切包含service_id的一行中的帐户数量。

第二个帐户必须计算accounts_extra中只有一行的帐户数量,并且针对特定ID的试用还没有结束

http://sqlfiddle.com/#!15/313db/3

基本上我在第一个查询中得到0,这是正确的,但是在第二个查询中,我得到了1,它是不正确的。

我假设订阅是可选的,所以这就是为什么我在第二个查询中获得1怎么做才能在第二个查询中获得0,但仍要考虑到trial_ends_at

1 个答案:

答案 0 :(得分:0)

您的问题很难回答,但我认为这符合您的描述:

SELECT SUM( (cnt = 1)::int ) as count1,
       SUM( (cnt = 1 AND cnt2 > 0)::int ) as count2
FROM (SELECT a.id, COUNT(DISTINCT ae.id) AS cnt,
             COUNT(ans.id) as cnt2
      FROM accounts a JOIN
           accounts_extra ae
           ON a.id = ae.account_id LEFT JOIN
           account_number_subscriptions ans
           ON ans.account_id = a.id AND
              ans.trial_ends_at > now()
      WHERE a.service_id = '101' AND
            a.closed = false AND
            ae.created_at < '2019-07-01'
      GROUP BY a.id
     ) a;