Hay muchas formas de hacer esto, una forma puede ser hacer una función en la base que según una tabla te retorne un ID de grupo, entonces agruparas por el resultado de esta función.
O mismo podríamos hacer algo tan sencillo como esto:
Código:
SELECT COUNT(*), R.DESCRIPCION
FROM PERSONAS P, RANGOS R
WHERE p.EDAD BETWEEN R.DESDE AND R.HASTA
GROUP BY R.ID
Suponiendo que tendríamos una tabla de rango similar a:
Código:
CREATE TABLE RANGOS (
ID NUMBER,
DESCRIPCION VARCHAR,
DESDE NUMBER,
HASTA NUMBER
)
Datos de rangos tipo:
Código:
ID DESDE HASTA
1 0 18
2 19 21
3 22 30
4 31 40
5 41 60
6 61 Máximo Posible
Saludos!