3

実験、機能、feature_values があります。機能には、さまざまな実験での値があります。だから私は次のようなものを持っています:

Experiments:
experiment_id, experiment_name

Features:
feature_id, feature_name

Feature_values:
experiment_id, feature_id, value

3 つの実験 (exp1、exp2、exp3) と 3 つの機能 (feat1、feat2、feat3) があるとします。次のような SQL 結果が必要です。

feature_name | exp1 | exp2 | exp3
-------------+------+------+-----
feat1        | 100  | 150  | 110
feat2        | 200  | 250  | 210
feat3        | 300  | 350  | 310

これどうやってするの?さらに、1 回の実験で 1 つの機能が値を持たない可能性があります。

feature_name | exp1 | exp2 | exp3
-------------+------+------+-----
feat1        | 100  | 150  | 110
feat2        | 200  |      | 210
feat3        |      | 350  | 310

SQL クエリのパフォーマンスは良好である必要があります。将来的には、feature_values テーブルに数千万のエントリが存在する可能性があります。または、データを処理するためのより良い方法はありますか?

4

3 に答える 3

5

これは一般的な要求です。これは、ピボットまたはクロス集計クエリと呼ばれます。PostgreSQL には適切な組み込み構文はありませんが、モジュールcrosstab関数をtablefunc使用して、必要なことを行うことができます。

詳細については、スタック オーバーフローで[postgresql] [pivot]またはを検索してください[postgresql] [crosstab]

一部のリレーショナル データベース システムでは、組み込みのクエリを使用してこれを行う優れた方法が提供されていますが、PostgreSQL にはまだありません。

于 2013-08-27T11:28:52.247 に答える