生年月日を範囲名に変換してから、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
サブクエリを使用して生年月日を範囲に変換すると、計算は行ごとに 1 回実行するだけで済むため、パフォーマンスが向上します。読みやすくなっています。
また、UNION を回避することで、クエリをテーブルの 1 回のパスで実行できます。