Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Contar o número de usuários em uma determinada faixa etária com base na data de nascimento


Converta a data de nascimento em um nome de intervalo e, em seguida, faça um grupo por cima disso com contagem:
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

Ao usar uma subconsulta para converter a data de nascimento em um intervalo, o cálculo só precisa ser executado uma vez por linha, portanto, deve ter um desempenho melhor. E é mais fácil de ler.

Além disso, evitando UNIONs, a consulta pode ser executada em uma passagem pela tabela.