如何使用SQL进行归因

时间:2019-06-27 15:57:45

标签: mysql sql

我有一张带有会话号和ID的表。我需要通过以下方式基于ID分配转化价值:

  1. 第一个会话获得0.4的转化价值
  2. 上次会话获得0.4的转化价值
  3. 两者之间的总和应为转化价值的0.2

如果只有一个会话,那么此会话将获得全部(1.0) 如果有两个会话,则每个会话获得0.5

Ses.Num  id
1        9
1        10
2        10
1        11
2        11
3        11
1        12
2        12
3        12
4        12

预期结果

Ses.Num id     Conversion_Value
1       9             1
1       10            0,5
2       10            0,5
1       11            0,4
2       11            0,2
3       11            0,4
1       12            0,4
2       12            0,1
3       12            0,1
4       12            0,4

1 个答案:

答案 0 :(得分:2)

在MySQL 8+中,您可以使用窗口函数:

select t.*,
       (case when count(*) over (partition by id) = 1
             then 1.0
             when count(*) over (partition by id) = 2
             then 0.5
             when row_number() over (partition by id order by ses.num) = 1
             then 0.4
             when row_number() over (partition by id order by ses.num desc) = 1
             then 0.4
             else 0.2 / (count(*) over (partition by id) - 2)
        end) 
 from t;