PostgreSQL- sum not recognized as aggregate function? -
i need have running amount of transactions per year. if total amount @ 2015
150
, @ 2016
, total amount 90
. means @ 2016
running amount 240
. , on.
so have data:
create table transactions2(year_num int, amount int); insert transactions2 values(2015, 100); insert transactions2 values(2015, 50); insert transactions2 values(2016, 90); insert transactions2 values(2017, 100); insert transactions2 values(2019, 200); select year_num, count(amount), sum(amount) on (order year_num) transactions2 group year_num order year_num;
if run select sql, get:
error: column "transactions2.amount" must appear in group clause or used in aggregate function line 9: select year_num, count(amount), sum(amount) on (order y... ^ ********** error ********** error: column "transactions2.amount" must appear in group clause or used in aggregate function sql state: 42803 character: 328
but have amount
in sum
function. why not working? if wrap sum(count(sum))
, works, not need have sum of count, need sum.
do need write inner select this?
in expression:
sum(amount) on (order year_num)
sum()
not simple aggregate, it's window function.
you want use both count()
, sum()
window functions:
select distinct year_num, count(amount) on w, sum(amount) on w transactions2 window w (order year_num) order year_num; year_num | count | sum ----------+-------+----- 2015 | 2 | 150 2016 | 3 | 240 2017 | 4 | 340 2019 | 5 | 540 (4 rows)
Comments
Post a Comment