2017-05-04 137 views
0

我有一个查询,从同一个表中返回的月平均值,但对于不同的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 

我该怎么做?

+0

为什么不干脆在CTE连接两个..他们有相同的标识 - 右.. –

+0

@VaoTsun我不是很熟悉?与postgressql&数据库一般 - 我甚至不知道什么CTE是:) PS是,相同的ID。 – pookie

+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 
+0

我期望得到12行(每月1个),但我得到144(12 * 12) - 使用您的查询。 – pookie

+0

hm - 确实有帮助吗?..看我需要结构:) –

+0

等一下 - 都是ids相同的值吗? –

相关问题