如何使用Python2.7在PostgreSQL中组合行

时间:2012-07-30 20:07:59

标签: postgresql python-2.7

我有以下格式的数据:

|------------------------|
| Product | Color | Year |
|------------------------|
|  Ball   | Blue  | 1999 |
|  Ball   | Blue  | 2000 |
|  Ball   | Blue  | 2001 |
|  Stick  | Green | 1984 |
|  Stick  | Green | 1985 |
|------------------------|

如何将其转换为以下内容:

|-----------------------------|
| Product | Color | Year Range|
|-----------------------------|
|  Ball   | Blue  | 1999-2001 |
|  Stick  | Green | 1984-1985 |
|-----------------------------|

数据位于PostgreSQL表中,包含187,000多行,迫切需要以这种方式进行整合。我如何使用Python 2.7来处理这个问题?

1 个答案:

答案 0 :(得分:2)

  

数据位于PostgreSQL表中,包含187,000多行   迫切需要以这种方式巩固。

可能迫切需要以这种方式进行整合以进行报告,但几乎可以肯定需要以这种方式进行整合以进行存储。在这里轻轻一步。

您可以使用GROUP BY子句以大致该格式获取数据。 (我使用“product_color_years”作为表名。)

select product, color, min(year), max(year)
from product_color_years
group by product, color

要将年份合并为一个列,请使用连接运算符。

select product, color, min(year) || '-' || max(year) year_range
from product_color_years
group by product, color

只有

才有效
  • 年份范围内没有任何差距,或
  • 有差距,但你不在乎。

如果您希望看到如此报告的空白:

product  color  year_range
--
Ball     Blue   1999-2001
Ball     Blue   2003-2005
Stick    Mauve  2000, 2010

那么你最好使用报告编写器。 (例如,谷歌“python报告”。)上面的SQL将这些蓝色球报告为Ball Blue 1999-2005,这可能不是你想要的。