【问题标题】:sql: sum all previous grouped rows [duplicate]sql:总结所有以前的分组行[重复]
【发布时间】:2018-02-07 22:12:08
【问题描述】:

我有下表:

  date     | shop_id | package_id | quantity
01/01/2017 |   1     |    1       |    1
01/01/2017 |   1     |    2       |    5
01/01/2017 |   2     |    1       |    10
01/01/2017 |   2     |    2       |    4
02/01/2017 |   1     |    1       |    14
02/01/2017 |   1     |    2       |    3
  ....

我想把以前所有同店同包的记录的数量相加,如下所示

  date     | shop_id | package_id | sum_quantity
01/01/2017 |   1     |    1       |    1
01/01/2017 |   1     |    2       |    5
01/01/2017 |   2     |    1       |    10
01/01/2017 |   2     |    2       |    4
02/01/2017 |   1     |    1       |    15
02/01/2017 |   1     |    2       |    8

  ....

【问题讨论】:

  • DBMS 是 postgresql
  • 所以你想保留所有的行,但是得到 sum_quantity 与前几天相同的 shop_idpackage_id 相加,对吗?
  • @RealCheeseLord 是的

标签: sql postgresql cumulative-sum


【解决方案1】:

这是一个基于 shop_id 和 package_id 的“运行总和”:

select "date", shop_id, package_id,
       sum(quantity) over (partition by shop_id, package_id order by "date") as sum_quantity
from the_table
order by "date";

sum() 用作window function(通过over() 部分)。窗口定义中的 order by 使其成为“运行”总和,而不是“总体”总和。

在线示例:http://rextester.com/ZOSK13092

【讨论】:

    猜你喜欢
    • 2021-01-21
    • 1970-01-01
    • 2013-06-09
    • 2018-09-18
    • 2019-09-27
    • 1970-01-01
    • 2020-05-31
    • 2018-11-17
    • 1970-01-01
    相关资源
    最近更新 更多