是否可以对同一列但不同行的值进行数学运算?

时间:2017-06-12 14:07:47

标签: postgresql window-functions

说我有这张桌子,

 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

1 个答案:

答案 0 :(得分:2)

在这种情况下,您应该使用window functionlead()

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)