在顺序Postgresql行中查找数据模式

时间:2014-01-08 06:28:40

标签: sql database postgresql data-mining

我想问问Postgres有多少次出现一次事件,每行一次。例如,如果我有以下用户事件:

  • 用户1:点击按钮1,重定向到第2页
  • 用户1:点击按钮2,重定向到第3页
  • 用户1:点击按钮18,重定向到第100页
  • 用户1:点击按钮1,重定向到第2页
  • 用户1:点击按钮2,重定向到第3页

然后我会看到模式((按钮1,第2页)=>(按钮2,第3页))计为两次出现。

这是可能的,如果是的话,怎么样?

1 个答案:

答案 0 :(得分:0)

这是一个非常好的问题,并且有一个相当简单的解决方案。使用GROUP BYHAVING找出哪个用户显示了哪种重复行为。

请参阅小提琴示例 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

干杯!