[SQL] Programmers - 서울에 위치한 식당목록 출력하기 <GROUP BY, INNER JOIN, WHERE>

2023. 4. 10. 15:47공부/SQL

Problem

Solution

같은 데이터셋을 사용하는 문제를 풀었는데 출력하는 데이터가 비슷하다. 

SELECT 
i.REST_ID, 
REST_NAME, 
FOOD_TYPE, 
FAVORITES, 
ADDRESS, 
ROUND(AVG(r.REVIEW_SCORE), 2) AS SCORE
FROM REST_INFO i
INNER JOIN REST_REVIEW r ON i.REST_ID = r.REST_ID
WHERE ADDRESS LIKE '서울%'
GROUP BY REST_ID
ORDER BY SCORE DESC, FAVORITES DESC;

특별히 어려운점은 없었는데, 문제를 풀면서 문제가 조금 잘못된 점을 발견했다.

 

REVIEW가 없는 서울 소재의 식당들도 포함되어야 하는게 아닌가? 현재의 쿼리문은

더보기

INNER JOIN REST_REVIEW r ON i.REST_ID = r.REST_ID

 

의 조건 때문에 REST_REVIEW 테이블에 존재하는 식당들의 목록만 출력할 것이다. 만약 REVIEW가 없는 식당들의 목록까지 결과에 포함시키려면 INNER JOIN이 아닌 LEFT OUTER JOIN 으로 바꾸면 아래와 같은 결과를 얻을 수 있을 것이다.

SELECT 
i.REST_ID, 
REST_NAME, 
FOOD_TYPE, 
FAVORITES, 
ADDRESS, 
ROUND(AVG(r.REVIEW_SCORE), 2) AS SCORE
FROM REST_INFO i
LEFT OUTER JOIN REST_REVIEW r ON i.REST_ID = r.REST_ID
WHERE ADDRESS LIKE '서울%'
GROUP BY REST_ID
ORDER BY SCORE DESC, FAVORITES DESC;

리뷰가 없기 때문의 평점의 평균값을 구할 수 없다. 조금 더 정확하게 처리하려면 IFNULL 함수를 이용해서 0 값을 입력하는 방법도 고려해볼만 하다.