计算案例中的差异 - 何时

时间:2013-08-26 19:34:38

标签: postgresql case-when

我正在尝试对用户活动进行一些分析,特别是在一段时间内仍有多少用户仍处于活动状态,或者至少已登录。但是,我在第一个月的计数中有一些相互矛盾的数字,这应该只是一个月内注册的用户数。为了解决这个问题,我的简单查询就是这个。

SELECT count(user_id)
FROM users
WHERE date_part('year', member_since) = 2013 
AND date_part('month', member_since) = 01

假设这会返回'1,000',我认为这是正确的,因为它很简单。但如果我这样做......

SELECT 
COUNT(CASE WHEN date_part('day', last_login - member_since) >= 0 
    THEN user_id END) days_0
FROM users
WHERE date_part('year', member_since) = 2013 
AND date_part('month', member_since) = 01

......它将返回少于1,000的数字。从理论上讲,这应该返回与上面相同的数字,因为即使last_login与member_since是同一天,也是零并且应该计算这些用户。 member_since和last_login都是'timestamp'类型。我有一种预感,差异可能是用户,其中last_login与member_since完全相同,这意味着他们已注册但永远不会回来,但我不确定如何测试它。这是一个NULL问题吗?如果是这样,我怎么能包括那个以回到'1000'的数量?

1 个答案:

答案 0 :(得分:0)

我敢打赌,因为他们总是会在其他声明中出现问题而导致问题,因为它们会导致问题。但/ p>

要纠正此问题,请尝试以下方法:

SELECT 
COUNT(CASE WHEN last_login is null or date_part('day', last_login - member_since) >= 0 
    THEN user_id END) days_0
FROM users
WHERE date_part('year', member_since) = 2013 
AND date_part('month', member_since) = 01;