Как сделать атрибуцию с помощью SQL - PullRequest
0 голосов
/ 27 июня 2019

У меня есть таблица с номером сессии и идентификатором. Мне нужно назначить значение конверсии на основе идентификатора следующим образом:

  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 Ответ

2 голосов
/ 27 июня 2019

В 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...