说我有这张桌子,
year | name | score
------+---------------+----------
2017 | BRAD | 5
2017 | BOB | 5
2016 | JON | 6
2016 | GUYTA | 2
2015 | PAC | 2
2015 | ZAC | 0
我如何逐年平均得分,然后得出年份之间的差异?
year | increase
------+-----------
2017 | 1
2016 | 3
答案 0 :(得分:2)
在这种情况下,您应该使用window function,lead()
:
select year, avg, (avg - lead(avg) over w)::int as increase
from (
select year, avg(score)::int
from my_table
group by 1
) s
window w as (order by year desc);
year | avg | increase
------+-----+----------
2017 | 5 | 1
2016 | 4 | 3
2015 | 1 |
(3 rows)