我有一个如下表:
id | day | value
-----------------
1 | SUN | 10
1 | MON | 15
1 | TUE | 11
.
.
.
1 | SAT | 13
2 | SUN | 08
.
.
.
2 | SAT | 22
我想计算一个名为time_weight
的新变量,它是value
的权重与特定的一天成正比。在R或Python这样的编程语言中,其公式将类似于((value - value[day=='TUE']) / value[day=='TUE']) + 1)
,因此time_weight
等于1时为day = 'TUE'
,而id = 1 & day = 'MON'
时为1.36。我很好奇如何在Oracle中做到这一点。
编辑:
这是我的预期输出:
id | day | value | time_weight
-------------------------------
1 | SUN | 10 | 0.9090
1 | MON | 15 | 1.3636
1 | TUE | 11 | 1
.
.
.
1 | SAT | 13 | 1.1818
2 | SUN | 08 | 0.4000
2 | MON | 10 | 0.5000
2 | TUE | 20 | 1.0000
.
.
.
2 | SAT | 22 | 1.1000
答案 0 :(得分:1)
您可以使用窗口功能来做到这一点:
select id, day, value,
value / max(case when day = 'TUE' then value end) over (partition by id) as time_weight
from t;