我正在使用BigQuery,并且有一个包含三个columsn的表:district
(字符串),price
(浮点数)和timestamp
)。我的表看起来像这样:
district price date
OOX 200 2015-01-01
00Y 213 2015-01-01
00X 215 2015-01-01
我想计算2005年各地区的平均价格,2015年各地区的平均价格,以及它们之间的百分比差异。换句话说,我希望输出看起来像这样:
district price_2005 price_2015 percent_change
00X 125 205 0.64
00Y 116 200 0.72
percent_change
列的格式并不重要 - 它也可以是百分比数字等。
如何使用BigQuery执行此操作?我到目前为止:
SELECT district, AVG(price) AS price
FROM mytable
WHERE date BETWEEN TIMESTAMP('2005-01-01') AND TIMESTAMP('2015-12-31')
GROUP BY district
但我不知道如何在不进行单独查询的情况下获取剩下的两列。我需要子查询吗?
答案 0 :(得分:1)
您可以使用条件聚合来完成此操作。使用旧版SQL界面:
select district,
avg(case when year(date) = 2005 then price end) as price_2005,
avg(case when year(date) = 2015 then price end) as price_2015,
((avg(case when year(date) = 2015 then price end) /
avg(case when year(date) = 2005 then price end)
) - 1) as change
from t
group by district;
更新的SQL界面的想法是相同的,但提取年份的功能是不同的。