2017-10-03 5 views
0

多くのテスト対象が多数のタスクを実行し、いくつかのセンサーがデータを収集している研究調査から、PostgreSQLデータベースに大きなデータテーブルを持っています。彼らはこれらの作業を行った。私は、各課題ごとに1つの行だけを持つテーブルを作成し、各タスクのセンサ測定値に対応する列を作成する必要があります。私が達成しようとしているかの簡単な例: Sample data and sample outputPostgreSQLを使用した研究からの主題/タスクを含むテーブルを平滑化またはピボットする

重要な問題のカップル:

  • 私はすでに私が各被験者/タスク組合せのための唯一の1行があり、必要なデータを集約しています。
  • すべての科目がすべてのタスクを完了しているとは限りません。サブジェクトがタスクを完了していない場合、対応するサブジェクト/タスク行は存在しない。
  • 出力には、センサーとタスクの可能なすべての組み合わせに対応する列が必要です。
  • 私が働いている実際のテーブルには、センサデータの37列24タスクがあり、各タスクは前と後のセッションで二回を行いました。したがって、必要な列の数は37x24x2=1776データの列です!

私はすべてのタスクのための新しいビューを作成することができ、その後、対象のカラムの外側に参加しますが、それはまだ手動ですべての24個の作業用に別のビューを作成し、すべての1776個の列の名前を指定することが必要となります。

必要な列を自動的に作成するクエリを作成するにはどうすればよいですか?

+0

どのような種類のオブジェクトで列を作成しますか?大きなページで再コンパイルする場合を除き、テーブルには1776個の列を入れることはできません。 「[PostgreSQLのselectクエリの最大カラム数は何ですか?]」(https://stackoverflow.com/questions/12606842) –

答えて

1

私はあなたがここにいくつかの特定の問題を抱えていると思う:

  1. 問合せは、計画目的のために最初の列を知っている必要があります。
  2. かなり大きなピボットをしたいと思っています。

私は、tablefuncのクロス集計関数が多くの助けになると思っています(または、C言語のテーブル値関数の例として書かれているので、必要に応じてハッキングする可能性があります)。ただし、クエリの外にクロス集計基準を生成して実行する必要があります。

これは、これを行うための2つのオプションにつながる:

  1. は、DB外のクエリを作成し、大規模なクロスタブまたは
  2. でそれを餌にPL/pgSQLにおけるデータベース内部クロスタブを作成します。ストアドプロシージャを呼び出し、refcursorを返します。

私はほとんどの場合、最初の方が良いと思われます。

+0

クロスタブはどのように生成されますか?私はPythonのようなもので文字列操作を使用したいですか?それについてもっと良い方法がありますか? – mooglinux

関連する問題