2016-06-25 19 views
1

Ich benutze BigQuery und habe eine Tabelle mit drei Spalten: district (String), price (float) und timestamp). Meine Tabelle sieht wie folgt aus:SQL: zwei Abfragen für verschiedene Zeiträume und prozentuale Änderung berechnen?

district price date 
OOX   200  2015-01-01 
00Y   213  2015-01-01 
00X   215  2015-01-01 

Ich möchte im Jahr 2015 im Jahr 2005 der durchschnittliche Preis von Kreis der mittleren Preis von Bezirk berechnen, und die prozentuale Differenz zwischen ihnen. Mit anderen Worten, ich würde Ausgang mag, die wie folgt aussieht:

district price_2005 price_2015 percent_change 
00X  125   205   0.64 
00Y  116   200   0.72 

Das Format der percent_change Spalte ist nicht entscheidend - es könnte auch eine Prozentzahl, etc. sein

Wie kann ich BigQuery, um dies zu tun? Ich habe so weit gekommen:

SELECT district, AVG(price) AS price 
FROM mytable 
WHERE date BETWEEN TIMESTAMP('2005-01-01') AND TIMESTAMP('2015-12-31') 
GROUP BY district 

Aber ich weiß nicht, wie die restlichen zwei Spalten zu erhalten, ohne separate Abfragen zu tun. Brauche ich eine Unterabfrage?

Antwort

1

Sie können dies mithilfe der bedingten Aggregation durchführen. Verwenden der älteren SQL-Schnittstelle:

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; 

Die Idee ist die gleiche für die aktualisierte SQL-Schnittstelle, aber die Funktion zum Extrahieren des Jahres ist anders.

Verwandte Themen