【发布时间】:2014-12-03 07:48:48
【问题描述】:
我有一个events 表,其中有一个user_id 和created_at 列。
我想计算的是在events 表中具有每日重复条目的用户百分比。
所以,如果 d1 日有 user_ids [a,b,c],d2 日有 user_ids [b,d,e],那么 b 是三个中唯一重复的 user_id(来自 @ 987654333@),d1 和 d2 之间有 33% 的重叠。
我希望能够将其延长任意天数。
有问题的架构:
CREATE TABLE events (
events_id serial PRIMARY KEY
, user_id VARCHAR(255) NOT NULL
, created_at datetime NOT NULL
);
这是一个大表,每天有 ~25MM 行,每天有 ~4.5MM 不同 user_ids。
示例数据集:
+---------+----------+ |用户 ID | created_at | +---------+----------+ |鲍勃 | 2014-12-02 11:11:11 | |莎莉 | 2014-12-02 12:12:11 | |泽 | 2014-12-02 12:22:11 | | | ... | |克里斯 | 2014-12-03 11:13:11 | |标记 | 2014-12-03 11:11:13 | |泽 | 2014-12-03 11:11:33 | | | ... | |悉尼 | 2014-12-04 11:14:11 | |泽 | 2014-12-04 11:44:11 | |克里斯 | 2014-12-04 11:44:11 | | | ... | |悉尼 | 2014-12-05 11:15:11 | |泽 | 2014-12-05 11:55:11 | |克里斯 | 2014-12-05 11:55:15 | |沙质 | 2014-12-05 11:55:51 | |悉尼 | 2014-12-05 11:55:55 | +---------+----------+预期输出:
+------------+---------------+ |天 |返回用户百分比 | +------------+---------------+ | 2014-12-02 |空 | | 2014-12-03 | 33 | | 2014-12-04 | 66 | | 2014-12-05 | 75 | +------------+---------------+此外,第 2 部分可能更简单:我想知道每天有多少新用户,其中“新”表示以前从未见过 user_id。
【问题讨论】:
-
这个问题并不完全清楚,无论哪种方式,都必须知道用户每天是否可以有多个事件。 表定义会澄清这一点(除其他外)。
-
更新了更详细的问题。谢谢。
-
(1) 我相信这就是我的回答; (2)你应该在一个问题中坚持一个问题。如果您想询问新客户,请提出另一个问题。
-
那么同一用户一天可以有任意数量的条目?您如何准确计算最后一行中的 60 % ? 100 % 12-04 的用户出现在 12-05,75 % 的用户 12-05 已经出现在 12-04 和 80 % 条目 与前一天出现的用户有关。无论哪种方式,对我来说都没有加起来。
-
@ErwinBrandstetter,很好,我很抱歉:75% 是正确的,我已经进行了相应的更新。 12-04 的 4 个 user_id 中有 3 个出现在 12-05。是的:同一用户一天可以有多个条目。
标签: sql postgresql