如何展平PostgreSQL结果

Bjo*_*sen 3 sql postgresql pivot crosstab

我有实验,功能和feature_values。要素在不同的实验中具有价值。所以我有这样的事情:

Experiments:
experiment_id, experiment_name

Features:
feature_id, feature_name

Feature_values:
experiment_id, feature_id, value
Run Code Online (Sandbox Code Playgroud)

可以说,我有三个实验(exp1,exp2,exp3)和三个功能(feat1,feat2,feat3)。我想要一个看起来像SQL的结果:

feature_name | exp1 | exp2 | exp3
-------------+------+------+-----
feat1        | 100  | 150  | 110
feat2        | 200  | 250  | 210
feat3        | 300  | 350  | 310
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?此外,在一项实验中,一项功能可能没有价值。

feature_name | exp1 | exp2 | exp3
-------------+------+------+-----
feat1        | 100  | 150  | 110
feat2        | 200  |      | 210
feat3        |      | 350  | 310
Run Code Online (Sandbox Code Playgroud)

SQL查询应具有良好的性能。将来,feature_values表中可能有数千万个条目。还是有更好的方法来处理数据?

Cra*_*ger 5

这是一个常见的要求。这称为枢轴查询或交叉表查询。PostgreSQL没有很好的内置语法,但是您可以使用模块中crosstab函数tablefunc来执行所需的操作

有关更多信息,请搜索[postgresql] [pivot]或的堆栈溢出[postgresql] [crosstab]

一些关系数据库系统提供了一种使用内置查询执行此操作的好方法,但PostgreSQL尚未提供。