Разделение для расчета процента по "свернутой" числовой переменной
У меня есть таблица личных данных с возрастом в годах. Я хотел бы рассчитать процент людей в моей таблице по трем или более свернутым категориям возрастов, таким как 18–29, 30–39, 40–49 и т. Д., Используя SQL.
По сути, я хочу, чтобы мой стол выглядел так:
Count | AgeCat | percent
400 | 50 and older | .40
300 | 35 to 49 | .30
300 | Under 35 | .30
Вот мой запрос:
select count(*),
case when age >= 50 then '50 and older' when age < 50 and age >= 35 then '35 to 49' else 'Under 35' end as AgeCat,
count(*)/sum(count(*)) over (partition by '') as percent
from mydata group by 2;
Оконная функция выше работает только тогда, когда я ограничиваю свой возрастной коллапс коллапсом двух категорий (больше / меньше 50)
1 ответ
Решение
Это ваш запрос:
select count(*),
(case when age >= 50 then '50 and older'
when age < 50 and age >= 35 then '35 to 49'
else 'Under 35'
end) as AgeCat,
count(*)/sum(count(*)) over (partition by '') as percent
from mydata
group by 2;
Это должно работать. Тем не менее, я бы написал это так:
select count(*),
(case when age >= 50 then '50 and older'
when age >= 35 then '35 to 49'
else 'Under 35'
end) as AgeCat,
( count(*) / sum(count(*)) over () ) as percent
from mydata
group by AgeCat
order by min(age);