select country_name,"year",gdp,array_agg("year") over(partition by country_name rows between 1 preceding and 1 following) from country_gdp_year_final
where country_code in('CHN','JPN','USA','DEU','CAN','FRA') and "year" between 2012 and 2017;
select country_name,"year",gdp,avg(gdp) over(partition by country_name order by "year" desc),
min(gdp) over(partition by country_name order by "year" desc ),
max(gdp) over(partition by country_name order by "year" desc)
from country_gdp_year_final
where country_code in('CHN','JPN','USA','DEU','CAN','FRA') and "year" between 2012 and 2017;
我们看一下上面的SQL代码,可以看到 over()括号里的代码都是一样的,在此,PG为我们提供一个提取窗口子句的功能,我们可以将上面的代码转换为下面等价可读性更好的代码
select country_name,"year",gdp,avg(gdp) over(myWindows),
min(gdp) over(myWindows),
max(gdp) over(myWindows)
from country_gdp_year_final
where country_code in('CHN','JPN','USA','DEU','CAN','FRA') and "year" between 2012 and 2017
window myWindows as(partition by country_name order by "year" desc);