sql >> Base de Datos >  >> RDS >> Sqlserver

Cuente el número de usuarios en un cierto rango de edad basado en la fecha de nacimiento

Convierta la fecha de nacimiento en un nombre de rango, luego haga un grupo por encima de eso con conteo:

select
  case when age < 18 then 'Under 18'
       when age > 50 then  'Over 50'
       else  '18-50' end as range,
  count(*) as count
from (select DATEDIFF(yy, user_dob, GETDATE()) as age from Customer) c
group by case when age < 18 then 'Under 18'
   when age > 50 then  'Over 50'
   else  '18-50' end

Al usar una subconsulta para convertir la fecha de nacimiento en un rango, el cálculo solo debe realizarse una vez por fila, por lo que debería funcionar mejor. Y es más fácil de leer.

Además, al evitar UNION, la consulta se puede ejecutar en una sola pasada sobre la tabla.