기록

프로그래머스_서울에 위치한 식당 목록 출력하기 본문

코딩테스트/SQL

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

youngyin 2023. 6. 24. 23:57

문제

https://school.programmers.co.kr/learn/courses/30/lessons/131118#qna

코드

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

마무리하면서

아래 풀이를 CTE를 사용하여 가독성을 높일 수 있다.

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

CTE를 사용하면 쿼리의 구조가 여러 개의 논리적인 부분으로 분리되어 코드의 모듈화와 재사용성을 증가시킬 수 있지만, CTE의 사용을 지나치게 남발하면 쿼리가 복잡해지고 가독성이 저하될 수 있다.

Comments