【问题标题】:SQL: Aggregate records within a group taking into account rows orderSQL:在考虑行顺序的情况下聚合组内的记录
【发布时间】:2016-11-30 10:15:03
【问题描述】:

我有一个如下结构的表

| id | a | b |
| 1  | 1 | 1 |
| 2  | 1 | 5 |
| 3  | 2 | 2 |
| 4  | 2 | 3 |
| 5  | 2 | 5 |
| 6  | 1 | 3 |
| 7  | 1 | 7 |
| 8  | 3 | 1 |
| 9  | 2 | 0 |
| 10 | 4 | 8 |

并且需要在“a”列中的每个组中计算“b”列中的总和,但要考虑行的顺序,即首先我们应该为a == 1添加1 + 5id s 1 和 2),然后我们将添加 2 + 3 + 5a = 2 (ids 3, 4, 5) 等等。

因此,结果我需要有这样的表格

| a | sum(b) |
| 1 |   6    |
| 2 |   10   |
| 1 |   10   |
| 3 |   1    |
| 2 |   0    |
| 4 |   8    |

请帮助编写一个 SQL 查询来执行此操作。

【问题讨论】:

  • 哪个 postgres 版本?..
  • 9.6,但理想情况下,代码不应附加到已定义的 PostgreSQL 版本,因为我想在 Apache Spark SQL 中使用它

标签: sql postgresql group-by pyspark-sql


【解决方案1】:
select      a,sum(b)

from       (select   *
                    ,row_number () over (order by id)                as rn
                    ,row_number () over (partition by a order by id) as rnp

            from     t
            ) t

group by    a,rn - rnp    

order by    min(id)  
;          

附言
我不指望 ID 是连续的

【讨论】:

    猜你喜欢
    • 2013-08-22
    • 2016-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多