작성
·
322
0
안녕하세요.
늘 좋은 강의 잘 듣고 있습니다.
해커랭크의 'Average Population of Each Continent' 문항을 복습하다가 LEFT. INNER JOIN에 관해 궁금한 점이 있습니다.
해당 문제를 복습하면서 아래와 같이 쿼리를 작성하였는데, NULL로 인해 Wrong Answer가 뜨더라구요ㅠ
SELECT country.continent
, FLOOR(AVG(city.population))
FROM city
LEFT JOIN country ON city.countrycode = country.code
GROUP BY country.continent
코드를 돌린 후, 답에 NULL 값이 있어, INNER JOIN으로 변경하였더니 정답으로 나오더라구요.
DATA를 보기 전에 LEFT JOIN과 INNER JOIN을 구분하는 방법이 있을까요?
답변 1
1
안녕하세요gino님
1. DATA를 보기 전에 LEFT JOIN과 INNER JOIN을 구분하는 방법이 있을까요?
LEFT JOIN과 INNER JOIN 중 무엇을 쓸까 하는 부분은 사실 문제에서 요구되는 조건에 따라 가져가는 것이 보편적입니다. 해당 문제에서는 먼저 the names of all the continents (COUNTRY.Continent)를 뽑고, 그에 따른 average city populations (CITY.Population)을 구하라고 했으니까. continent와 population에 모두 값이 있는 것으로 가정하고 진행을 하는 문제여서 INNER JOIN을 사용해주시는 게 맞는 것 같습니다.
개인적인 경험으로는 조인 방식에 별도로 JOIN 방식에 대한 힌트가 없는 경우에는 보통 INNER JOIN을 쓰는 것으로 가정하고 시작하는 경우가 많았는데요. 이 부분은 참고만 해주시면 될 것 같아요.
2. 답에 NULL 값이 있어, INNER JOIN으로 변경
이와 별개로 데이터에 NULL 값이 들어있는지를 데이터를 다 살펴보지 않고 확인하는 법에 대해 알려드릴게요.
raw 데이터에 NULL 값이 있는지를 확인할 때에는 보통 COUNT(*)와 COUNT(특정 컬럼)을 사용하여 전체 데이터의 갯수와 특정 컬럼의 데이터 갯수가 차이가 나는지를 확인합니다.
COUNT 집계 함수의 특성상 각 컬럼에 NULL 값이 있으면 해당 데이터는 없다고 생각하고 데이터가 있는 경우의 갯수만 세어주기 때문에 위 방식으로 컬럼에 NULL값이 들어있는지를 확인 할 수 있습니다.
조인을 하기 전에 NULL 값이 있는지를 확인해보고 싶으시다면 COUNT(*), COUNT(countrycode) 이런 식으로 집계함수를 이용해서 확인해보시면 될거에요!
궁금증이 해결되셨길 바랍니다 :)