【问题标题】:Work out variance of groups of rows in SQL计算 SQL 中行组的方差
【发布时间】:2021-06-30 04:26:05
【问题描述】:

我希望为一个数据表计算每月的方差值,每个月包含要考虑的三行。我正在努力想一种没有“循环”的方法,据我所知,SQL 不支持这种方法。

这是我的意思的示例表:

+======================+=======+
| timestamp            | value |
+======================+=======+
| 2020-01-04T10:58:24Z | 10    | # January (Sum of vals = 110)
+----------------------+-------+
| 2020-01-14T10:58:21Z | 68    |
+----------------------+-------+
| 2020-01-29T10:58:12Z | 32    |
+----------------------+-------+
| 2020-02-04T10:58:13Z | 19    | # February (Sum of vals = 112)
+----------------------+-------+
| 2020-02-14T10:58:19Z | 5     |
+----------------------+-------+
| 2020-02-24T10:58:11Z | 88    |
+----------------------+-------+
| 2020-03-04T10:58:11Z | 72    | # March (Sum of vals = 184)
+----------------------+-------+
| 2020-03-15T10:58:10Z | 90    |
+----------------------+-------+
| 2020-03-29T10:58:16Z | 22    |
+----------------------+-------+
| ....                 | ....  |
+======================+=======+

我需要构建一个查询,该查询可以组合每个月每个项目的所有 3 个值,然后计算出几个月内组合值的变化。希望这是有道理的?所以在这种情况下,我需要计算出 1 月 (110)、2 月 (112) 和 3 月 (184) 之间的差异。

有人对我如何做到这一点有任何建议吗?我正在使用 PostgreSQL,但需要一个普通的 SQL 解决方案:/

谢谢!

【问题讨论】:

    标签: sql postgresql database-design variance


    【解决方案1】:

    您是否正在寻找按月汇总然后计算差异?如果是这样:

    select variance(sum_vals)
    from (select date_trunc('month', timestamp) as mon, sum(val) as sum_vals
          from t
          group by mon
         ) t;
    

    【讨论】:

    • 这似乎行得通!这是一个非常巧妙的解决方案,我想如果以这种速度达到相同的结果,我会花费很多令人尴尬的台词。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-09
    • 1970-01-01
    • 2020-07-25
    • 1970-01-01
    相关资源
    最近更新 更多