You can try using WIDTH_BUCKET .
select bucket , count(name) from (select name, spend, WIDTH_BUCKET(spend, 0, 200, 4) bucket from mytable ) group by bucket order by bucket;
Here I divided the range from 0 to 200 into 4 buckets. And the function assigns a bucket number to each value. You can group this bucket and count how many rectors fall into each bucket.
Demo is here .
You can even display the actual bucket range.
select bucket, cast(min_value + ((bucket-1) * (max_value-min_value)/buckets) as varchar2(10)) ||'-' ||cast(min_value + ((bucket) * (max_value-min_value)/buckets) as varchar2(10)), count(name) c from (select name, spend, WIDTH_BUCKET(spend, min_value, max_value, buckets) bucket from mytable) group by bucket order by bucket;
An example is here .
source share