【问题标题】:Postgres Standard deviation of multiple columnsPostgres多列的标准差
【发布时间】:2016-03-10 12:27:47
【问题描述】:

我正在尝试计算每个给定 ID 的多个列的标准差。

我有一张表格,显示了一段时间内的需求,我需要计算需求的波动性。

SELECT id ::Text, n0 ::numeric, n1 ::numeric, n2 ::Numeric, n3 ::numeric, n4 ::numeric, n5 ::numeric, n6 ::numeric, n7 ::numeric  
FROM mytable

我想添加另一列,用于计算每个 id 列中的值与 n0-n7 中的值的标准偏差。

【问题讨论】:

    标签: sql postgresql


    【解决方案1】:

    嗯。可能最简单的方法是取消透视表并重新聚合。例如:

    select id, stddev(n)
    from ((select id, n0 as n from mytable) union all
          (select id, n1 as n from mytable) union all
          (select id, n2 as n from mytable) union all
          (select id, n3 as n from mytable) union all
          (select id, n4 as n from mytable) union all
          (select id, n5 as n from mytable) union all
          (select id, n6 as n from mytable) union all
          (select id, n7 as n from mytable)
         ) t
    group by id;
    

    注意:您可以在stddev_pop()stddev_samp() 之间进行选择。后者将是此问题的典型选择。

    【讨论】:

      【解决方案2】:

      要使用 stddev_pop() 聚合函数,您应该将值收集到一个数组中,然后将 unnest() 收集到数组中:

      select id, stddev_pop(val)
      from (
          select id, unnest(array[n0, n1, n2, n3, n4, n5, n6, n7]) val
          from mytable
          ) sub
      group by id;
      

      【讨论】:

        【解决方案3】:

        你试过stddev_samp吗?还是您的意思是 列之间的标准差?如果是这样,请查看this SO question

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-02-27
          • 1970-01-01
          • 2021-10-19
          • 2017-01-15
          • 2021-12-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多