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
'IT Story > SQL Story' 카테고리의 다른 글
국가 통계 데이터 분석하기: 주택 매매 데이터로 분석하기 (0) | 2022.12.08 |
---|---|
국가 통계 데이터 분석하기: 행정 구역별 남녀 비율 구하기 (0) | 2022.12.08 |
국가 통계 데이터 분석하기: 행정 구역별 인구 분석하기 (0) | 2022.12.08 |
5일, 20일 가격 이동 평균 구하기 (1) | 2022.12.08 |
보유 주식 수익 증감액 구하기 (0) | 2022.12.08 |