通过对每个特定的分组级别对n个数值变量求和

时间:2013-02-20 06:15:18

标签: sql database postgresql group-by postgresql-9.1

我正在解决问题,并且可以在这一点上使用一些方向。我想通过分组级别来总结一些变量,这些变量对于要求和的每个变量是不同的(但是相同的值域)。在伪伪代码中,这是我的问题:对于每个empYEAR变量(大型格式中有20个左右的逐年变量),我想将其与业务所在的县相加。在那一年。

这些数据是一系列代表Dun& amp; amp; amp; amp; Co. Bradstreet公司/ NETS。

有关数据库的更多详细信息,这是一些平面文件,都具有相同的主键。

主键是DUNSNUMBER,它存在于多个表中。每年都有详细的表格:

  • 就业
  • county
  • 销售
  • 信用评级(及其他)

所有组织如下(此表显示就业,但其他变量结构相似,带有一年后缀)。

dunsnumber|emp1990  |emp1991|emp1992|...    |emp2011|
a         | 12      |32     |31     |...    | 35    |
b         |         |2      |3      |...    | 5     |
c         | 1       |1      |       |...    |       |
d         | 40      |86     |104    |...    | 350   |
...

我最终希望有一个结构如下的表:

county |emp1990|emp1991|emp1992|...|emp2011|sales1990|sales1991|sales1992|sales2011|...
A
B
C
...

我现在面临的主要挑战是:如果县作为分组变量有时按年份更改并在另一个表中指定,我如何按照上面的示例表中的按年分配就业(或销售)? / p>

R中使用长数据格式似乎相当简单,但有数百万条记录,所以我更喜欢在postgres中保留初始处理。

1 个答案:

答案 0 :(得分:1)

据我了解你的问题,这听起来相对简单。虽然我通常更喜欢使用标准化数据,但我没有看到事先规范化的事情会在这里给你带来任何具体的信息。

在我看来,你想要一些比较简单的东西:

SELECT sum(emp1990), sum(emp1991), ....
  FROM county c
  JOIN emp e ON c.dunsnumber = e.dunsnumber
  JOIN sales s ON c.dunsnumber = s.dunsnumber
  JOIN ....
 GROUP BY c.name, c.state;

我没有看到更简单的方法。很可能您可以查询系统目录或信息模式以生成要汇总的列列表。就我所知,剩下的就是一个直接的分组和加入过程。

如果变量按名称更改,根据我的经验,最好的做法是将基于该联合的位置视图放在一起并加入它。这使您可以隐藏主查询的复杂性,只要您不加入基础表就应该表现得非常好。