[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 값을 입력하는 방법도 고려해볼만 하다.
'공부 > SQL' 카테고리의 다른 글
[MySQL] DATE_FORMAT (0) | 2023.04.10 |
---|---|
[SQL] Programmers - 자동차 대여 기록에서 대여중 / 대여 가능 여부 구분하기 <CASE, GROUP BY, SUBQUERY> (0) | 2023.04.10 |
[SQL] Programmers - 중성화 여부 파악하기 (0) | 2023.04.09 |
[SQL] Programmers - 루시와 엘라 찾기 <REGEXP> (0) | 2023.04.09 |
[SQL] Programmers - 자동차 평균 대여기간 구하기 <GROUP BY, HAVING, DATE> (0) | 2023.04.09 |