我有一张带有会话号和ID的表。我需要通过以下方式基于ID分配转化价值:
如果只有一个会话,那么此会话将获得全部(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
答案 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;