我正在尝试对用户活动进行一些分析,特别是在一段时间内有多少用户仍然活跃,或者至少登录。但是,我有一些与前几个月的数字相冲突的数字,这应该只是一个月内注册的用户数。为了弄清楚这一点,我的简单查询是这样的。
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 都是“时间戳”类型。我有一种预感,不同之处可能是 last_login 与 member_since 完全相同的用户,这意味着他们注册后再也没有回来,但我不确定如何测试它。这是一个 NULL 问题吗?如果是这样,我怎么能将其包括在内以恢复到“1,000”的计数?