DB
[MySQL]연령대별 인원 수, 비율 구하기
찬란한
2022. 8. 17. 23:28
주민등록번호를 기반한 만 나이를 기준으로 유저의 10대, 20대, 30대, 40대, 50대 인원 수와 비율을 구하는 쿼리이다.
해가 바뀌어 나이는 매번 변하므로 주민등록번호를 가지고 만 나이 값을 구해야했다.
먼저 만 나이 값을 뽑은 것을 기준으로 다음 연령별 구분을 할 수 있기 때문에,
만 나이 구하는 테이블을 전처리한다.
age_group - 연령구분
count - 인원 수
% - 비율
SELECT
case
when age >= 10 and age <= 19 then '10대'
when age >= 20 and age <= 29 then '20대'
when age >= 30 and age <= 39 then '30대'
when age >= 40 and age <= 49 then '40대'
when age >= 50 and age <= 59 then '50대'
when age >= 60 and age <= 69 then '60대'
when age >= 70 and age <= 79 then '70대'
else age end as age_group, count(*) as 'count', (count(*) / total * 100) as '%'
from
(
select *,
(select FLOOR( (CAST(REPLACE(CURRENT_DATE,'-','') AS UNSIGNED) - CAST(
case SUBSTR(socialNumber,7,1)
WHEN '1' then concat('19', LEFT(socialNumber,6)
WHEN '2' then concat('19', LEFT(socialNumber,6)
WHEN '3' then concat('20', LEFT(socialNumber,6)
WHEN '4' then concat('20', LEFT(socialNumber,6)
WHEN '5' then concat('19', LEFT(SocialNumber,6)
WHEN '6' then concat('19', LEFT(socialNumber,6)
WHEN '7' then concat('20', LEFT(socialNumber,6)
WHEN '8' then concat('20', LEFT(socialNumber,6)
END AS UNSIGNED)) / 10000 )) age
,(select count(*) from user) total
FROM user
) A GROUP BY age_group