prueba esto:
SELECT count(*) as ct,
CASE
WHEN COUNT(*) < 25 THEN '1-25'
WHEN COUNT(*) >= 25 < 50 THEN '25-50'
WHEN COUNT(*) >= 50 < 100 THEN '50-100'
WHEN COUNT(*) >= 100 < 250 THEN '100-250'
WHEN COUNT(*) >= 250 < 500 THEN '250-500'
WHEN COUNT(*) >= 500 < 1000 THEN '500-1000'
ELSE '1000+'
END AS grp
FROM records r, accounts a
WHERE r.account_id=a.id
GROUP BY r.account_id, a.id,
CASE
WHEN COUNT(*) < 25 THEN '1-25'
WHEN COUNT(*) >= 25 < 50 THEN '25-50'
WHEN COUNT(*) >= 50 < 100 THEN '50-100'
WHEN COUNT(*) >= 100 < 250 THEN '100-250'
WHEN COUNT(*) >= 250 < 500 THEN '250-500'
WHEN COUNT(*) >= 500 < 1000 THEN '500-1000'
ELSE '1000+' END
ORDER BY count(*)
Tiene que "definir" los "cubos" en los que desea agregar las filas de datos originales... Para esto está la cláusula Group By... Define los criterios por los cuales se analizará cada fila en las tablas base para determinar en qué "cubo" se agregarán sus datos... La expresión o expresiones definidas en la cláusula group by son las "definiciones" para esos cubos.
A medida que la consulta procesa las filas de datos originales, cualquier fila para la que los valores de esta expresión sean los mismos que los de un depósito existente se agrega a ese depósito... Cualquier fila nueva con un valor no representado por un depósito existente cubo hace que se cree un nuevo cubo...