如何将多个选择结果合并到一个表中?

时间:2017-05-04 13:09:02

标签: postgresql

我有一个查询,它返回同一个表中的月平均值,但对于不同的pressure_level:

SELECT some_id, avg(exposure_value) monthly_avg_1000
FROM mytable
WHERE pressure_level = 1000
AND some_id = 7
GROUP BY some_id, date_trunc('month', measurement_time)

然后我有相同的查询,但对于不同的pressure_level:

SELECT some_id, avg(exposure_value) monthly_avg_925
FROM mytable
WHERE pressure_level = 925
AND some_id = 7
GROUP BY some_id, date_trunc('month', measurement_time)

两个查询都返回12行(每月1行),其中包含ID和月份的平均值:

some_id | monthly_avg_1000
--------------------------
1       | 0.000023 
1       | 0.000051 
1       | 0.000009 

some_id | monthly_avg_925
--------------------------
1       | 0.000014 
1       | 0.000007 
1       | 0.000131

我想将两个查询组合在一起,以使monthly_avg_ *列全部显示在最终表中:

some_id | monthly_avg_1000 | monthly_avg_925
--------------------------
1       | 0.000023         | 0.000014 
1       | 0.000051         | 0.000007 
1       | 0.000009         | 0.000131

我该怎么做?

1 个答案:

答案 0 :(得分:1)

如果您有相同的ID,那么您可以尝试加入:

with a as (
SELECT some_id, avg(exposure_value) monthly_avg_1000,date_trunc('month', measurement_time) d
FROM mytable
WHERE pressure_level = 1000
AND some_id = 7
GROUP BY some_id, date_trunc('month', measurement_time)
)
, b as (
SELECT some_id, avg(exposure_value) monthly_avg_925, date_trunc('month', measurement_time) d
FROM mytable
WHERE pressure_level = 925
AND some_id = 7
GROUP BY some_id, date_trunc('month', measurement_time)
) 
select distinct a.some_id, monthly_avg_1000,monthly_avg_925 
from a
join b on a.some_id = b.some_id and a.d = b.d