Example query for bucketing up a bunch of values in SQL Server

Example of sorting results into buckets (ranges), and showing the count in each bucket, as well as the average of some other column, for members in that bucket.

declare @interval int = 5000 --bucket size
    --@interval * Floor(DirectDistance/@interval) as Min_,
    --@interval * Floor(DirectDistance/@interval) + @Interval - 1 as Max_,
    '' + Cast((@interval * Floor(DirectDistance/@interval)) as varchar(20))  + ' - ' +
        Cast((@interval * Floor(DirectDistance/@interval) + @Interval - 1) as varchar(20)) as 'Range',
    --Floor(DirectDistance/@interval) as Bucket,
    AVG(Metres_Per_Minute) as Avg_Metres_Per_Minute,
    COUNT(*) as Number_of_Examples
group by
having COUNT(*) > 15
order by
    Floor(DirectDistance/@interval)  --order by bucket

See also