Более эффективный способ решить эту проблему только в SQL - это объединить данную таблицу с производной таблицей, которая содержит минимальные и максимальные значения, которые вы хотите видеть в своей гистограмме.
Например:
select t.min, t.max, count(*)
from (
select 0 as min, 14.9 as max
union
select 15, 29.9
union
select 30, 44.9
union ...
) t
left outer join cars c on c.speed between t.min and t.max
group by t.min, t.max
order by t.min
min | max | count
-----------------
0 | 14.9 | 1
15 | 29.9 | 1
30 | 44.9 | 2
Это сильно зависит от того, какого поставщика базы данных вы используете.Например, в PostgreSQL есть концепция оконных функций , которая может существенно упростить этот тип запроса и лишить вас необходимости самостоятельно создавать «таблицу гистограмм».
Когда дело доходит до HibernateПохоже, что Projection и поддержки агрегированных функций , которые применимы к чему-либо подобному, очень мало.Это вполне может быть сценарий, в котором вы хотите перейти к использованию необработанного SQL для запроса и / или выполнить вычисления в самой Java.