PostgreSQL-选择两个子查询的结果

PostgreSQL-选择两个子查询的结果,postgresql,Postgresql,我有两个复杂的查询,它们都是postgres中的子查询,结果如下: q1_results = id , delta , metric_1 q2_results = id , delta , metric_2 我希望合并查询结果,以便外部查询可以访问: results_a = id , delta , metric_1 , metric_2 results_b = id , delta , combined_metric 我不知道该怎么做。在线搜索不断将我引向UNION,但这会使指标保持在同一

我有两个复杂的查询,它们都是postgres中的子查询,结果如下:

q1_results = id , delta , metric_1
q2_results = id , delta , metric_2
我希望合并查询结果,以便外部查询可以访问:

results_a = id , delta , metric_1 , metric_2
results_b = id , delta , combined_metric

我不知道该怎么做。在线搜索不断将我引向
UNION
,但这会使指标保持在同一列中。我需要将它们分开。

你在问题和评论中提出的问题并不完全清楚,但听起来你可能在寻找一个包含一系列合并语句的完整连接,例如:

-- create view at your option, e.g.:
-- create view combined_query as
select coalesce(a.id, b.id) as id,
       coalesce(a.delta, b.delta) as delta,
       a.metric1 as metric1,
       b.metric2 as metric2,
       coalesce(a.metric1,0) + coalesce(b.metric2,0) as combined
from   (...) as results_a a
full join (...) as results_b b on a.id = b.id -- and a.delta = b.delta maybe?

视图表会有帮助吗?看起来很适合
自然外部连接
,以及以后的一些后处理,以获得
组合度量
。我想在pg选择/更新中完成所有操作。我开始研究一个
外部联接
解决方案,但这会创建一个6列宽的字段,其中包含大量空值;
case
语句似乎变得不必要的复杂。
NATURAL
将通过折叠同名字段并将其用作连接目标,使表4列变宽,因此您将从两个表中合并
id
delta
,并从一侧合并
metric_1
,从
metric_2
我没有注册
NATURAL
。你说得对!谢谢这正是我想要的。非常感谢你。不过,不要把这种观点和任何事情联系起来。如果您尝试,性能将非常糟糕。:-)是 啊这实际上是夜间工作的一部分,用于缓存一些数据以进行按需分析处理。我们有一点打击,但是在凌晨3点运行,在内存中做任何事情会节省很多时间。哦,在这种情况下,如果你升级到PG 9.3,考虑物化视图。并根据需要编制索引。