SQL:针对不同时间段的两个查询,并计算百分比变化?

时间:2016-06-25 16:45:57

标签: sql google-bigquery

我正在使用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

但我不知道如何在不进行单独查询的情况下获取剩下的两列。我需要子查询吗?

1 个答案:

答案 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界面的想法是相同的,但提取年份的功能是不同的。