코딩테스트/SQL
프로그래머스_서울에 위치한 식당 목록 출력하기
zyin
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의 사용을 지나치게 남발하면 쿼리가 복잡해지고 가독성이 저하될 수 있다.