Если вы просто хотите группы из 5, вы, вероятно, можете просто установить столбец для группы, который делится на 5.
with my_source_data as (
select 4 as spent, 1234 as totalsent, 123 as totalused from dual union all
select 6 as spent, 12 as totalsent, 4 as totalused from dual union all
select 7 as spent, 45 as totalsent, 32 as totalused from dual
)
select
(spent_group -1) * 5 + 1 as lower_bound,
spent_group * 5 as upper_bound, totalsent, totalused
from (
select
greatest(ceil(spent/5),1) as spent_group,
sum(totalsent) as totalsent, sum(totalused) totalused
from my_source_data
group by greatest(ceil(spent/5),1)
)
Этот код не совсем правильно обрабатывает 0 или что-либо ниже 0поскольку он помещает все в нижнюю группу и помечает его 1-5
, но ваши требования в этом отношении немного расплывчаты.
Кроме того, это редкая группировка, поэтому для 11-15 будет только строкаесли есть исходные данные, которые позволяют его производить.