0

我正在按问题解决一个小组,此时可以使用一些方向。我想通过一个分组级别来总结多个变量,对于每个要求和的变量,该分组级别是不同的(但值域相同)。在伪伪代码中,这是我的问题:对于每个empYEAR变量(宽格式有 20 个左右的按年就业变量),我想按该特定年份企业所在的县对其进行汇总。

这些数据是一组代表 Dun & Bradstreet/NETS 过去 20 年的商业机构的表格。

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

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

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

全部组织如下(此表显示就业,但其他变量的结构类似,后缀为年份)。

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
...

我现在的主要挑战是:如果县作为分组变量有时会按年变化并在另一个表中指定,我如何按年按县对就业(或销售额)进行汇总,如上例表所示?

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

4

1 回答 1

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;

我没有看到更简单的方法来做到这一点。您很可能可以查询系统目录或信息模式以生成要汇总的列列表。据我所知,其余的是直接分组并加入过程。

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

于 2013-04-29T06:44:59.230 回答