【问题标题】:Finding data patterns in sequential Postgresql rows在顺序 Postgresql 行中查找数据模式
【发布时间】:2014-01-26 03:06:30
【问题描述】:
我想询问 Postgres 一个事件发生两次的频率,每行一次发生一次。例如,如果我有这样的用户事件:
- 用户 1:单击按钮 1,重定向到页面 2
- 用户 1:单击按钮 2,重定向到页面 3
- 用户 1:点击按钮 18,重定向到页面 100
- 用户 1:单击按钮 1,重定向到页面 2
- 用户 1:单击按钮 2,重定向到页面 3
然后我会看到模式 ((button 1, page 2) => (button 2, page 3)) 算作两次出现。
这可能吗?如果可以,怎么做?
【问题讨论】:
标签:
sql
database
postgresql
data-mining
【解决方案1】:
这是一个非常好的问题,并且有一个相当简单的解决方案。使用GROUP BY 和HAVING 找出哪个用户表现出什么样的重复行为。
请参阅小提琴示例 here,其中讨论了 DDL 和我用来获得所需结果的查询。
根据您的描述,我建议您创建一个用于存储用户事件的表,如下所示:
CREATE TABLE t_clickevent (
clickevent_id INTEGER,
user_id INTEGER,
clicked_button_id INTEGER,
redirected_url_id INTEGER);
根据需要添加更多列。这只是一个最小的结构。
使用如下查询:
SELECT user_id, clicked_button_id,
redirected_url_id
FROM t_clickevent
GROUP BY user_id, clicked_button_id,
redirected_url_id
HAVING count(*) > 1;
输出:
USER_ID CLICKED_BUTTON_ID REDIRECTED_URL_ID
----------- --------------------- -----------------
1 1 2
1 2 3
干杯!