代码之家  ›  专栏  ›  技术社区  ›  tblznbits

如何计算与OracleSQL中特定值成比例的权重

  •  0
  • tblznbits  · 技术社区  · 6 年前

    我有一张桌子,如下所示:

    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) 以便 时间加权 day = 'TUE' 1.36为 id = 1 & day = 'MON' . 我很想知道如何在甲骨文中做到这一点。

    编辑:

    以下是我的预期输出:

    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 回复  |  直到 6 年前
        1
  •  1
  •   Gordon Linoff    6 年前

    您可以使用窗口函数:

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