Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Conta il numero di utenti in una determinata fascia di età in base alla data di nascita

Converti la data di nascita in un nome di intervallo, quindi esegui un gruppo superando quello con conteggio:

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

Utilizzando una sottoquery per convertire la data di nascita in un intervallo, il calcolo deve essere eseguito solo una volta per riga, quindi dovrebbe funzionare meglio. Ed è più facile da leggere.

Inoltre, evitando UNION, la query può essere eseguita in un passaggio sulla tabella.