使用临时扩展表来计算总和

时间:2014-12-08 17:29:47

标签: sql postgresql

从给定的表中我希望能够对具有相同数字的值求和(应该很容易,对吗?)

问题:可以从2到n个连续数字分配给定值。 由于某些原因,此信息存储在一行中,描述了值,起始编号和结束编号,如下所示。

表A

 id | starting_number | ending_number | value
----+-----------------+---------------+-------
  1                 2                5      8
  2                 0                3      5
  3                 4                6      6
  4                 7                8     10

例如第一行意味着: 值'8'分配给数字:2,3和4(不包括5)

所以,我想要以下intermediairy结果表

表B

 id | number | value
----+--------+-------
  1        2       8
  1        3       8
  1        4       8
  2        0       5
  2        1       5
  2        2       5
  3        4       6
  3        5       6
  4        7      10    

所以我可以对具有相同“数字”

的元素求和'值'
SELECT number, sum(value)
FROM B
GROUP BY number

表C

 number | sum(value)
--------+------------
      2           13
      3            8
      4           14
      0            5
      1            5
      5            6
      7           10

我不知道该怎么做,也没有在网上找到任何答案(可能没有找到适当的关键词......) 任何的想法?

1 个答案:

答案 0 :(得分:1)

您可以使用generate_series()执行所需操作。所以,TableB基本上是:

select id, generate_series(starting_number, ending_number - 1, 1) as n, value
from tableA;

您的汇总是:

select n, sum(value)
from (select id, generate_series(starting_number, ending_number - 1, 1) as n, value
      from tableA
     ) a
group by n;