Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Zählen Sie die Anzahl der Benutzer in einem bestimmten Altersbereich basierend auf dem Geburtsdatum

Wandeln Sie das Geburtsdatum in einen Bereichsnamen um und gruppieren Sie es dann mit count:

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

Durch die Verwendung einer Unterabfrage zum Konvertieren des Geburtsdatums in einen Bereich muss die Berechnung nur einmal pro Zeile durchgeführt werden, sodass sie eine bessere Leistung erbringen sollte. Und es ist einfacher zu lesen.

Außerdem kann die Abfrage durch Vermeiden von UNIONs in einem Durchgang über die Tabelle ausgeführt werden.