2016-10-06 6 views
0

Я пытаюсь сгруппировать столбец возраста в столбцы возрастной группы и суммировать эту группу.R: Создать группы в столбце

т.е. мне нужно ниже набор данных -

AGE 
1 
2 
5 
68 
27 
4 
2 
33 
45 

Чтобы стать

AGE_GRP COUNT 
1-10  5 
11-20 0 
21-30 1 
31-40 1 
40+  2 

Я использую R

Спасибо.

+0

Почему редактирование? Ваш исходный вопрос касался SQL, и вы приняли ответ в SQL. Если вы также хотите знать, как вы это делаете в R, задайте отдельный вопрос. –

ответ

1

Вам нужно CASE заявление разделить AGE на различные группы

SELECT CASE 
     WHEN AGE BETWEEN 1 AND 10 THEN '1-10' 
     WHEN AGE BETWEEN 11 AND 20 THEN '11-20' 
     WHEN AGE BETWEEN 21 AND 30 THEN '21-30' 
     WHEN AGE BETWEEN 31 AND 40 THEN '31-40' 
     ELSE '40+' 
     END AS AGE_GRP, 
     Count(1) as Cnt 
FROM yourtable 
GROUP BY CASE 
      WHEN AGE BETWEEN 1 AND 10 THEN '1-10' 
      WHEN AGE BETWEEN 11 AND 20 THEN '11-20' 
      WHEN AGE BETWEEN 21 AND 30 THEN '21-30' 
      WHEN AGE BETWEEN 31 AND 40 THEN '31-40' 
      ELSE '40+' 
      END 

Если вы не хотите повторить CASE заявление, в GROUP BY затем использовать этот

SELECT AGE_GRP, 
     Count(1) AS cnt 
FROM (SELECT CASE 
       WHEN AGE BETWEEN 1 AND 10 THEN '1-10' 
       WHEN AGE BETWEEN 1 AND 10 THEN '11-20' 
       WHEN AGE BETWEEN 1 AND 10 THEN '21-30 ' 
       WHEN AGE BETWEEN 1 AND 10 THEN '31-40' 
       ELSE '40+' 
       END AS AGE_GRP 
     FROM yourtable) A 
GROUP BY AGE_GRP 
1

У вас есть нулевые значения, так вам нужен left join:

select agegrp, count(t.agegrp) 
from (select '1-10' as agegrp, 1 as lowb, 10 as hib union all 
     select '11-20' as agegrp, 11, 20 union all 
     select '21-30' as agegrp, 21, 30 upperbound union all 
     select '31-40' as agegrp, 31, 40 as upperbound union all 
     select '40+' as agegrp, 41, NULL as upperbound 
    ) ag left join 
    t 
    on t.age >= ag.lowb and t.age <= ag.hib 
group by ag.agegrp 
order by ag.lowb; 

Примечание: предполагается, что столбец является целым числом, поэтому недопустимое значение 30.5. Легко настроить запрос для обработки нецелого возраста, если это необходимо.