Si vous êtes désireux groupes de 5, vous pouvez probablement mettre en place une colonne de groupe sur lequel se divise par 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)
)
Ce code ne gère pas tout à fait 0 ou quoi que ce soit en dessous de 0 correctement depuis il met tout dans le groupe inférieur et l'étiquette 1-5
, mais vos exigences sont un peu vagues à cet égard.
De plus, il s'agit d'un regroupement parcimonieux, il n'y aura donc qu'une ligne pour 11-15 s'il y a des données source qui permettent de le produire.
Merci poneys. +1 – EvilTeach
Je veux juste grouper par sur la base de conditions sur un attribut. Ici, c'est (totalsent/totalused) groupés par passé en groupes de 0-5, 6-10, 11-15 –