如何在Oracle SQL中计算与特定值成比例的权重

时间:2018-09-25 14:55:49

标签: sql oracle

我有一个如下表:

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

1 个答案:

答案 0 :(得分:1)

您可以使用窗口功能来做到这一点:

select id, day, value,
       value / max(case when day = 'TUE' then value end) over (partition by id) as time_weight
from t;