我要实现的3个表是为两种查询计算确切的行数。
第一个帐户必须计算在帐户accounts_extra
中仅确切包含service_id
的一行中的帐户数量。
第二个帐户必须计算accounts_extra
中只有一行的帐户数量,并且针对特定ID的试用还没有结束
http://sqlfiddle.com/#!15/313db/3
基本上我在第一个查询中得到0,这是正确的,但是在第二个查询中,我得到了1,它是不正确的。
我假设订阅是可选的,所以这就是为什么我在第二个查询中获得1怎么做才能在第二个查询中获得0,但仍要考虑到trial_ends_at
答案 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;