본문 바로가기

IT Story/SQL Story

국가 통계 데이터 분석하기: 연도별 인구 증감 분석하기

01. 행정 구역 코드로 전체 인구의 연도별 증감, 증감률 검색하기

SELECT

     a.[시점] AS a_year,

     a.[총인구 (명)] AS a_population,

     b.[시점] AS b_year,

     b.[총인구 (명)] AS b_population,

     b.[총인구 (명)] - a.[총인구 (명)] AS diff_population,

     CONVERT(DECIMAL(18,2), (b.[총인구 (명)] - a.[총인구 (명)] )/a.[총인구 (명)] * 100) AS diff_ratio

FROM census_2015_2020 AS a

     LEFT OUTER JOIN census_2015_2020 AS b ON a.[C행정구역별(읍면동)] = b.[C행정구역별(읍면동)] 

    AND a.[시점] = b.[시점] -1

WHERE a.[C행정구역별(읍면동)] ='00'

결과

a_year a_population  b_year      b_population     diff_population     diff_ratio
2015    51069375     2016          51269554          200179                  0.39
2016    51269554     2017          51422507          152953                  0.30
2017    51422507     2018          51629512          207005                  0.40
2018    51629512     2019          51779203          149691                  0.29
2019    51779203     2020          51829136          49933                    0.10
2020    51829136     NULL          NULL                  NULL                    NULL

 

02. 행정 구역 코드로 시/도 인구의 연도별 증감, 증감률 검색하기

SELECT

     a.[C행정구역별(읍면동)] AS c_city,

     a.[행정구역별(읍면동)] AS city,

     a.[시점] AS a_year,

     a.[총인구 (명)] AS a_population,

     b.[시점] AS b_year,

     b.[총인구 (명)] AS b_population,

     b.[총인구 (명)] - a.[총인구 (명)] AS diff_population,

     CONVERT(DECIMAL(18,2), (b.[총인구 (명)] - a.[총인구 (명)] )/a.[총인구 (명)] * 100) AS diff_ratio

FROM census_2015_2020 AS a

     LEFT OUTER JOIN census_2015_2020 AS b ON a.[C행정구역별(읍면동)] = b.[C행정구역별(읍면동)] 

    AND a.[시점] = b.[시점] -1

WHERE a.[C행정구역별(읍면동)] LIKE '[^0]_'

ORDER BY  a.[C행정구역별(읍면동)],  a.[시점]

결과

c_city    city              a_year  a_population  b_year  b_population   diff_population
11        서울특별시 2015     9904312        2016      9805506          -98806
11        서울특별시 2016     9805506        2017      9741871          -63635
11        서울특별시 2017     9741871        2018      9673936          -67935
11       서울특별시 2018     9673936         2019      9639541          -34395
11       서울특별시 2019     9639541         2020      9586195          -53346
11      서울특별시 2020      9586195         NULL      NULL                NULL
21      부산광역시 2015      3448737        2016       3440484          -8253
21      부산광역시 2016      3440484        2017       3416918         -23566
21     부산광역시 2017       3416918        2018       3395278         -21640
21     부산광역시 2018      3395278        2019        3372692         -22586
21     부산광역시 2019      3372692        2020        3349016         -23676
21     부산광역시 2020      3349016        NULL        NULL               NULL

LEFT OUTER JOIN 문에서 a 시점과 b-1 시점을 매칭시켰고, 시도 행정구역은 0을 포함하지 않는 두 자릿수의 문자열이므로 LIKE를 사용해 '[^0]_' 조건을 사용했다. 서울,부산,대구는 인구가 지속적으로 감소하고, 경기,제주,세종시는 큰 인구 증가를 보인다.

 

03. 과거 5년간 시/도 인구의 인구 증감이 가장 큰 순서대로 검색하기

SELECT

     a.c_city,

     a.city,

     a.year AS a_year,

     a.population AS a_population,

     b.year AS b_year,

     b.population AS b_population,

     b.population - a.population  AS diff_population,

     CONVERT(DECIMAL(18,2), ( b.population - a.population )/a.population  * 100) AS diff_ratio

FROM (

    SELECT

          [C행정구역별(읍면동)] AS c_city,

          [행정구역별(읍면동)] AS city,

          [시점] AS year,

          [총인구 (명)] AS population

     FROM census_2015_2020 

     WHERE [시점] = 2015 AND [C행정구역별(읍면동)] LIKE '[^0]_'

     ) AS a

     LEFT OUTER JOIN (

    SELECT

          [C행정구역별(읍면동)] AS c_city,

          [행정구역별(읍면동)] AS city,

          [시점] AS year,

          [총인구 (명)] AS population

     FROM census_2015_2020 

     WHERE [시점] = 2020 AND [C행정구역별(읍면동)] LIKE '[^0]_'

     ) AS b ON a.c_city = b.c_city

ORDER BY  diff_ratio DESC

결과

c_city     city                         a_year      a_population      b_year       b_population     diff_population    diff_ratio
29         세종특별자치시    2015         204088            2020             353933             149845                  73.42
39         제주특별자치도    2015         605619            2020             670858             65239                    10.77
31         경기도                   2015          12479061       2020            13511676          1032615                 8.27
34        충청남도                2015          2107802         2020             2176636           68834                      3.27
33        충청북도                2015         1589347          2020            1632088            42741                      2.69