Notice
Recent Posts
Recent Comments
Link
250x250
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | |||||
| 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 10 | 11 | 12 | 13 | 14 | 15 | 16 |
| 17 | 18 | 19 | 20 | 21 | 22 | 23 |
| 24 | 25 | 26 | 27 | 28 | 29 | 30 |
| 31 |
Tags
- javascript
- LEVEL 2
- Lv. 0
- 자바스크립트
- 프로그래머스
- 깊이 우선 탐색
- 파이썬
- Lv. 2
- SQL 고득점 KIT
- join
- 너비 우선 탐색
- 티스토리챌린지
- bfs
- Python
- Lv. 1
- Lv. 3
- Baekjoon
- level 3
- group by
- Dynamic Programming
- 오블완
- 동적계획법
- softeer
- dfs
- 소프티어
- 백준
- programmers
- Java
- SQL
- DP
Archives
- Today
- Total
몸과 마음이 건전한 SW 개발자
[HackerRank-MSSQL] 해커랭크 Basic Join - Average Population of Each Continent 본문
SQL/MSSQL
[HackerRank-MSSQL] 해커랭크 Basic Join - Average Population of Each Continent
스위태니 2026. 4. 21. 13:44728x90
문제 링크
https://www.hackerrank.com/challenges/average-population-of-each-continent/problem?isFullScreen=true
Average Population of Each Continent | HackerRank
Query the names of all continents and their respective city populations, rounded down to the nearest integer.
www.hackerrank.com
틀린 코드 1
select co.continent, floor(avg(ci.population)) from city as ci
left join country as co on ci.countrycode = co.code
group by co.continent;

틀린 코드 2
select co.continent, floor(avg(ci.population)) from city as ci
right join country as co on ci.countrycode = co.code
group by co.continent;

정답 코드
SELECT
CO.Continent,
FLOOR(AVG(CI.Population))
FROM CITY AS CI
INNER JOIN COUNTRY AS CO
ON CI.CountryCode = CO.Code
GROUP BY CO.Continent;
풀이 과정
1. 문제 해결 사고 과정
- 연결(Join): CITY 테이블에는 인구 정보가 있고, COUNTRY 테이블에는 대륙 정보가 있습니다. 두 테이블을 CountryCode와 Code를 기준으로 합쳐야 합니다.
- 그룹화(Group By): 대륙별 평균을 구해야 하므로 Continent 컬럼을 기준으로 데이터를 묶습니다.
- 계산(Average): AVG(Population)를 사용하여 인구 평균을 구합니다.
- 내림(Floor & Integer): 소수점을 버리고(내림) 결과값을 정수(Integer) 형태로 출력해야 합니다.
2. 주요 오답 포인트 및 정리
- 왜 INNER JOIN?
- 도시가 있는 국가와 대륙만 계산하면 되기 때문. 만약 RIGHT JOIN을 써서 도시가 없는 대륙까지 나오면 평균값이 NULL이 되어 오답 처리가 될 수 있다.
- 왜 CAST(... AS FLOAT)?
- MSSQL에서 INT / INT를 하면 결과도 정수형이 되어 소수점이 미리 잘려나갈 수 있다. 정확한 평균 계산 후 내림을 하기 위해 잠시 실수형(FLOAT)으로 변환하는 것이 안전
- 왜 FLOOR?
- 문제에서 요구한 'Rounded down'에 가장 부합하는 함수. (소수점 첫째 자리에서 무조건 내림)

느낀점
- left join을 해버리면 대륙이 명시되지 않은 데이터를 가져와서 null로 보여진다.
- right join을 하면 도시에 인구수가 명시되지 않은 데이터까지 avg를 하기 때문에 null이 나온다.
- 따라서 둘 다 있는 inner join으로 문제를 풀어야 한다.
- 데이터가 어떻게 생겼는지를 모르니 풀기가 좀 까다로웠다.
728x90