-1

次の形式のデータがあります。

|------------------------|
| 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を使用してこれをどのように処理できますか?

4

1 に答える 1

2

データは PostgreSQL テーブルにあり、この方法で統合する必要がある 187,000 以上の行が含まれています。

レポートを作成するためにどうしてもそのように統合する必要があるかもしれませんが、ストレージのためにそのように統合する必要はほとんどありません。ここは軽く踏みます。

GROUP BY句だけで、おおよそその形式でデータを取得できます。(テーブル名は「product_color_years」を使用しました。)

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

年を 1 つの列にまとめるには、連結演算子を使用します。

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

その場合は、レポート ライターを使用する方がよいでしょう。(たとえば、Google の「python レポート」。) 上記の SQL は、これらの青いボールを としてレポートしますBall Blue 1999-2005が、これは、希望どおりではない可能性があります。

于 2012-07-30T21:21:21.907 に答える