【问题标题】:SQL Sum window functionSQL Sum 窗口函数
【发布时间】:2022-01-19 21:08:46
【问题描述】:

我有一个表,我需要一个包含前 4 行总和值的列。

表格是这样的:

例如,在第 5 行的新列中,值应该是 29,因为之前的 4 行有 6+8+8+7 = 29。

我知道我可能应该使用窗口函数,我尝试过但没有成功将 order_rate 列中的 4 个先前值相加。 (按分区,按顺序,按中间等。)我可能像往常一样遗漏了一些小东西:'(

提前致谢!

【问题讨论】:

  • 您使用的是哪个 dbms?
  • 这里的大多数人希望样本表数据和预期结果为格式化文本,而不是图像。
  • minimal reproducible example 在询问 SQL 问题时是一个很好的开始。

标签: sql window-functions


【解决方案1】:

我认为你可以通过使用类似的东西来实现你想要的

SUM(order_rate) OVER (ORDER BY Quarter_time ROWS 4 PRECEDING) - order_rate

窗口函数会将前 4 行 order_rates 和当前行相加,因此最后减去当前行 order_rate 值仅得到前 4 行值的总和。

【讨论】:

    【解决方案2】:

    您没有说您使用的是哪个数据库,但该解决方案应该适用于大多数数据库。您可以设置 窗口框架 以指示要聚合的特定行子范围。例如:

    select t.*,
      sum(order_rate) over(
        order by quarter_time
        rows between 4 preceding and 1 preceding -- window frame
      ) as new_sum
    from t
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-20
      • 1970-01-01
      • 2020-11-29
      • 1970-01-01
      • 2018-01-03
      • 1970-01-01
      • 1970-01-01
      • 2017-12-17
      相关资源
      最近更新 更多