sql >> Base de Datos >  >> RDS >> Oracle

¿Cómo obtener el recuento de personas en función de los grupos de edad mediante la consulta SQL en la base de datos de Oracle?

Primero, su cálculo de edad es incorrecto. Es casi seguro que desea medir los meses entre las dos fechas en lugar de esperar que dividir por 365,25 sea lo suficientemente cercano

trunc( months_between( sysdate, p.birth_date )/ 12 )

En segundo lugar, si desea agrupar por rangos, solo necesita seleccionar el rango en un case declaración y grupo por eso

SELECT (case when age <= 5
             then 'age <= 5'
             when age > 5 and age <= 10
             then 'age > 5 and age <= 10'
             else 'age > 10'
         end) bucket,
       count(*)
  FROM( SELECT trunc( months_between( sysdate, p.birth_date )/ 12 ) age
          FROM person p )
 GROUP BY (case when age <= 5
                then 'age <= 5'
                when age > 5 and age <= 10
                then 'age > 5 and age <= 10'
                else 'age > 10'
            end)