Один метод использует grouping sets
:
select id, name, date, sum(amount) as amount
from table1
where date > 2015
group by grouping sets ( (id, name, date), (name), () );
Я не уверен, какие новые имена столбцов вы хотите добавить.
EDIT:
Предполагая, что три ключевых столбца никогда не равны NULL
, вы можете назначить имена как:
select id,
(case when name is null then 'Total'
when id is null then 'name' || '''s Total'
else name
end) as name
date, sum(amount) as amount
from table1
where date > 2015
group by grouping sets ( (id, name, date), (name), () );