꿈은 데이터분석가, 취미는 계획

[프로그래머스: SQL 고득점 kit] 서울 매장의 리뷰 평균 구하기 본문

SQL/SQL문풀

[프로그래머스: SQL 고득점 kit] 서울 매장의 리뷰 평균 구하기

data_2080 2025. 2. 6. 09:18
728x90

출처: [프로그래머스] : 서울에 위치한 식당 목록 출력하기

문제:  매장정보와 리뷰정보 테이블을 활용하여 매장정보와 리뷰 평균 출력 


1. INNER JOIN 활용하기

1) 매장 정보 테이블과 리뷰 테이블을 INNER JOIN(리뷰가 있는 것만 조회 되도록)
2) GROUP BY로 매장별 정보와 리뷰 평점을 집계
3) where절에서 LIKE로 서울인 것을 필터링

     *주의* 샘플 데이터에 '서울특별시'로 되어있어서 그대로 사용하였는데 '서울시'로 입력된 것도 있어 정답처리x
     샘플만 믿지 말고 실제로 조회해보는 단계가 필요!

 

SELECT ri.REST_ID,
        ri.REST_NAME,
        ri.FOOD_TYPE,
        ri.FAVORITES AS FAVORITE,
        ri.ADDRESS,
        ROUND(AVG(REVIEW_SCORE),2) AS SCORE 
FROM REST_INFO AS ri
    INNER JOIN REST_REVIEW AS rr USING(REST_ID)
WHERE ri.ADDRESS LIKE '서울%'
GROUP BY REST_ID
ORDER BY SCORE DESC, FAVORITE DESC

 

2. 서브쿼리 활용하기

1) 서브쿼리로 매장리뷰 테이블에서 매장명과 평점을 추출

2) 서브쿼리를 매장정보 테이블과 JOIN
3) 동일하게 WHERE절에서 서울인 것만 필터링

SELECT ri.REST_ID, 
        ri.REST_NAME,
        ri.FOOD_TYPE, 
        ri.FAVORITES, 
        ri.ADDRESS, 
        rr.SCORE 
FROM REST_INFO AS ri 
    JOIN 
    (SELECT REST_ID, ROUND(AVG(REVIEW_SCORE),2) AS SCORE 
     FROM REST_REVIEW 
     GROUP BY REST_ID) rr 
    USING(REST_ID)
WHERE ri.ADDRESS LIKE '서울%'
ORDER BY rr.SCORE DESC, ri.FAVORITES DESC;

 

3. INNER JOIN vs JOIN + 서브쿼리 차이점

구분 INNER JOIN JOIN + 서브쿼리
평균 점수 계산 방식 AVG(REVIEW_SCORE) 직접 계산 서브쿼리에서 미리 계산
성능 비교 장점) 조인과 평균 계산을 한 번에 수행하여
빠를 수 있음.

단점) REST_REVIEW 테이블이 크다면, 조인 후 AVG(REVIEW_SCORE)를 계산하는 과정이 부담될 수 있음.
장점) REST_REVIEW 테이블이 크다면 JOIN 시 불필요한 중간 데이터 처리를 줄일 수 있어 성능이 더 좋을 수도 있음.
728x90