Разделение для расчета процента по "свернутой" числовой переменной

У меня есть таблица личных данных с возрастом в годах. Я хотел бы рассчитать процент людей в моей таблице по трем или более свернутым категориям возрастов, таким как 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);
Другие вопросы по тегам