2017-06-12 89 views
1

說我有這個表,是否可以對同一列但不同行的值進行數學運算?

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

請** [編輯] **你的問題,並添加基於您的樣本數據的預期輸出。 [**格式化文本**](http://stackoverflow.com/help/formatting)請,[**沒有屏幕截圖**](http://meta.stackoverflow.com/questions/285551/why-may -i-不上傳圖像-的代碼上那麼當灰化-A-問題/ 285557#285557)。 –

+0

@a_horse_with_no_name我做了一些更改/編輯;對於先前的問題抱歉(第一次使用堆棧,並沒有意識到我的問題是非常不清楚) – 374

回答

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) 
+0

這是非常有用的(我簡化了一些數據,但這對我的原始設置非常有效),非常感謝! – 374

+0

這可能是一個愚蠢的問題,但在from()語句的末尾是什麼? – 374

+0

FROM中的子查詢必須有別名 - 這是別名。 – klin

相關問題