SQL根据比较属性将用户分组

时间:2018-08-14 04:50:29

标签: sql amazon-athena presto

最终,我需要的是能够根据不同项目比较不同的团队表现。

我有两个数据集。第一个是user_table,其中包含迄今为止所有人员的摘要。下面的示例:

user_id     date_added          attribute_1     attribute_2     attribute_3     ...
1           2018-01-01          a               a               null
2           2018-01-02          b               b               b
3           2018-01-02          b               c               a

第二个数据集是一个action_table,其中包含所有已发生动作的摘要。

timestamp       user_id         action_name         project_name    
2018-01-01      1               responded           project_A
2018-01-01      1               called              project_A
2018-01-01      1               responded           ...
2018-01-02      1               called              
2018-01-02      1               called              
2018-01-03      3               attended
2018-01-04      2               responded           
2018-01-05      1               attended

使用所有这些,我需要产生一个这样的表:

project_name    group_name  project_date    group_total group_attended  day_0   day_1   day_2   ...
project_A       group_a     2018-01-01      200,000     15,000          1,000   2,000   3,000   
project_A       group_b     2018-01-01      20,000      5,000           8,000   9,000   10,000
project_A       group_c     2018-01-01      30,000      6,000           9,000   10,000  12,000
project_B       group_a     2018-01-08      15,000      1,000           2,000   3,000   5,000
project_B       group_b     2018-01-08      20,000      5,000           8,000   9,000   10,000
project_B       group_c     2018-01-08      30,000      6,000           9,000   10,000  12,000

group_name-对具有相似属性的用户进行分组。属性可以来自两个表。例如,如果组定义是从1月2日开始添加且attribute_1为b的用户,则用户2和3将在同一组中。

group_total-属于该组的用户数。无论用户是否出现在action_table中,都应包括迄今为止的用户总数。

group_attended-属于具有action_name的组的用户数,该用户参加了相应的project_name。

day_0-属于同一project_name的action_name为action_c的组的用户数,同一天以前的无人参与的action_name在此发生。然后,随着天数差异增加直到day_7,此过程将进行到day_1。这意味着到day_7时,该数字应始终小于或等于group_attended。

在某些情况下,用户的action_name仅会参加。在这种情况下,我们需要为响应的对象分配模式project_date以获得天数差异。

0 个答案:

没有答案