SQL:计算日复一日的重复用户百分比

标签 sql postgresql

我有一个 events 表,其中包含 user_idcreated_at 列。

我想弄清楚的是在events 表中每天重复输入的用户百分比。

因此,如果第 d1 日有 user_id[a,b,c],并且第 d2 日有user_ids [b,d,e],那么b是三者中唯一重复的user_id(来自 d1),d1d2 之间有 33% 的重叠。

我希望能够将其延长任意天数。

有问题的模式:

CREATE TABLE events (
  events_id serial PRIMARY KEY
, user_id VARCHAR(255) NOT NULL
, created_at datetime NOT NULL
);

这是一个大表,每天有大约 25MM 行,每天有大约 4.5MM 不同的 user_id

示例数据集:

+---------+---------------------+
| user_id |     created_at      |
+---------+---------------------+
| bob     | 2014-12-02 11:11:11 |
| sally   | 2014-12-02 12:12:11 |
| zed     | 2014-12-02 12:22:11 |
|         | ...                 |
| chris   | 2014-12-03 11:13:11 |
| mark    | 2014-12-03 11:11:13 |
| zed     | 2014-12-03 11:11:33 |
|         | ...                 |
| sydney  | 2014-12-04 11:14:11 |
| zed     | 2014-12-04 11:44:11 |
| chris   | 2014-12-04 11:44:11 |
|         | ...                 |
| sydney  | 2014-12-05 11:15:11 |
| zed     | 2014-12-05 11:55:11 |
| chris   | 2014-12-05 11:55:15 |
| sandy   | 2014-12-05 11:55:51 |
| sydney  | 2014-12-05 11:55:55 |
+---------+---------------------+

预期输出:

+------------+---------------------------+
|    day     | returning_user_percentage |
+------------+---------------------------+
| 2014-12-02 | NULL                      |
| 2014-12-03 | 33                        |
| 2014-12-04 | 66                        |
| 2014-12-05 | 75                        |
+------------+---------------------------+

此外,第 2 部分可能要简单得多:我想知道每天有多少新用户,其中"new"表示 user_id 以前从未见过。

最佳答案

假设 created_at 是一个没有时间成分的日期:

select e.created_at,
       avg(case when eprev.user_id is not null then 1.0 else 0.0 end) as overlap
from events e left join
     events eprev
     on e.created_at = eprev.created_at + interval '1' day and e.user_id = eprev.user_id
group by e.created_at

关于SQL:计算日复一日的重复用户百分比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27240918/

相关文章:

mysql - SQL查询以获取具有逗号分隔值的行

postgresql - 如何将 AzureContainerApp 连接到不向 Internet 开放的 Azure 托管 PostgreSQL 灵活服务器

postgresql - 名称冲突时如何优先使用表名而不是列(在 postgres 中)

postgresql - 总和 HH :mm in PostgreSQL

mysql - 查询划分数据

php - 使用php生成Excel报告

php - PHP 中的 MD5 哈希验证因未知原因失败

laravel - 如何在 postgresql 中使用 laravel 迁移特定或自定义模式

postgresql - 调试 PostgreSQL 用户定义函数

MYSQL - 多个和同一列上不同值的条件