해당 문제는 HackerRank에서 사용한 문제이며 모든 테이블의 자료와 출처는 Hackerank임을 밝힙니다.
해당 글에서는 INNER JOIN를 사용하여 푸는 문제로 그래도 처음 푸는 사람에게도 적절한 문제인 것 같습니다..
해당 문제 원본을 확인 하시려면 해당 사이트를 들어가시면 될 것 같습니다.
시작하겠습니다
Given the CITY and COUNTRY tables, query the names of all the continents (COUNTRY.Continent) and their respective average city populations (CITY.Population) rounded down to the nearest integer.
Note: CITY.CountryCode and COUNTRY.Code are matching key columns.
(CITY와 COUNTRY 두 개의 테이블이 있습니다. 모든 continents 값과 continents에 해당 하는 값의 도시 인구의 평균 값을 내림을 하여 정수로 표현하라는 문제입니다.
Note: CITY 테이블의 CountryCode와 COUNTRY테이블의 Code가 서로 연결되는 key입니다.)
이 문제에서는 두 개의 테이블이 주어졌으며 저희는 도시 인구가 필요하므로 CITY 테이블을 활용해야 합니다. 그러므로 두 개의 테이블에서 가져와야 합니다. 그러므로 JOIN을 활용해야 하며 각 continents에 해당하는 population 또한 뽑아야 하니 Group By을 사용하면 될 것 같습니다.
그리고 내림을 활용해야 하니 FLOOR()를 기억해주시면 될 것 같습니다.
1. CITY와 COUNTRY 테이블 확인하기
테이블이 이렇게 구성 된 것을 보아 너무 많아 좀 혼란스러울 수도 있으나, 저희는 저희가 필요한 컬럼만 보시면 됩니다.
2. INNER JOIN을 통해 테이블 합치기
우선 두 개의 테이블 먼저 합쳐 보겠습니다.
SELECT co.continent, c.population
FROM CITY c
INNER JOIN COUNTRY co ON c.countrycode = co.code
이렇게 두 개의 테이블을 합쳐서 문제에서 원하는 contient와 population을 가져올 수 있게 되었습니다.
예를 들어 여기서 나온 127800이라는 population은 Asia에 해당하는 어느 도시의 인구 수를 뜻합니다.
3. GROUP BY와 AVG를 활용하여 해당 continents에 해당하는 평균 도시 인구 구하기
SELECT co.continent, FLOOR(AVG(c.population))
FROM CITY c
INNER JOIN COUNTRY co ON c.countrycode = co.code
GROUP BY co.continent
이렇게 continent로 그룹화하고 population를 AVG를 사용하여 평균을 구한 후 FLOOR를 통해 소수점들을 내림해주고 정수로 바꿔 주었습니다.
결과 문제에서 원하는 답이 출력 되었습니다.
이상으로 Hacker Rank 문제 풀이를 마치도록 하겠습니다.
'Data Analyst > SQL' 카테고리의 다른 글
[SQL] HackerRank 문제 풀기 (Symmetric Pairs) (0) | 2024.10.15 |
---|---|
[SQL] SELF JOIN 사용하여 문제 풀기 (Rising Temperature) (0) | 2024.10.14 |
[SQL] CASE 사용하여 문제 풀기 (Type of Triangle) (0) | 2024.10.10 |
[SQL] GROUP BY 사용하여 문제풀기 (Top Earners) (0) | 2024.10.09 |
SQL - Window Function (RANK, DENSE_RANK, LAG, LEAD) (1) | 2024.09.25 |