SQL:在不使用 PIVOT 的情况下获取多列的方差

SQL: get variance for multiple columns without using PIVOT

我在 SQL 中有一个如下所示的数据表 (dt):

ID        state_id     act  rd_1 rd_2    rd_3   rd_4  rd_5
11        abc,13.3      1    1.   31     17.4   32.4  0.4
11        afd,23.2      4    1.   42.1   1.3    31.9  0.39
11        dfw,154       7    0.   0.3    4.3    8.21  163.3
12        vab,64.5      8    1.   32.3   11     2.1   21.3
12        avf,542       2    0.   2.12   28.2   8.12  57.5
12        vjg,35        4    1.   5.7    8.64   7.46  0.25
13        vaw,424.2     4    1.   64.3   0.435  4.3   35.3
14        bda,243       1    0.   4.4    4.6    2.4   4.2
15        rbe,24.2      3    1.   43     53.5   4.4   8.5

我想为每一行计算从 rd_1 到 rd_5 的值的方差(它们是双精度值)。 ID 和 state_id 唯一标识一行。所需的输出如下所示:

ID        state_id     act  rd_1 rd_2    rd_3   rd_4  rd_5.   var_rd
11        abc,13.3      1    1.   31     17.4   32.4  0.4    192.6624
11        afd,23.2      4    1.   42.1   1.3    31.9  0.39   323.3181
11        dfw,154       7    0.   0.3    4.3    8.21  163.3  4109.9855
12        vab,64.5      8    1.   32.3   11     2.1   21.3   141.3463
13        vaw,424.2     4    1.   64.3   0.435  4.3   35.3   636.2333
14        bda,243       1    0.   4.4    4.6    2.4   4.2    3.0496
15        rbe,24.2      3    1.   43     53.5   4.4   8.5    473.2456

我知道可以使用 pivot 来展平数据,然后计算展平数据中列 (rd_value) 的方差。但是我使用的 SQL 不支持 Pivot 方法。我尝试使用 UNION 但它似乎与 user_id.

混淆了

我会通过应用方差公式来解决这个问题:

select t.*,
       ( (rd_1 - rd_avg) * (rd_1 - rd_avg) +
         (rd_2 - rd_avg) * (rd_2 - rd_avg) +
         (rd_3 - rd_avg) * (rd_3 - rd_avg) +
         (rd_4 - rd_avg) * (rd_4 - rd_avg) +
         (rd_5 - rd_avg) * (rd_5 - rd_avg) +
       ) as variance 
from (select t.*, 
             (rd_1 + rd_2 + rd_3 + rd_4 + rd_5) / 5 as rd_avg
      from t
     ) t