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

박신희·2023년 7월 23일
0

[풀이] 프로그래머스

목록 보기
33/33
post-thumbnail

📌 풀이과정

  • 조인할 칼럼 : REST_ID (식당 이름)
  • 서브쿼리에서 먼저 REST_ID에 따른 평균점수를 계산
  • ADDRESS 칼럼 같은 경우에는 데이터들을 보면 '서울특별시~' or '서울시~'로 시작하는 것으로 볼 수있다. 따라서, LIKE의 조건을 %서울%이 아니라 서울%로 해야한다.

🤜 풀이코드1

-- 식당 ID, 식당 이름, 음식 종류, 즐겨찾기 수, 주소, 리뷰 평균 점수
SELECT  I.REST_ID, I.REST_NAME, I.FOOD_TYPE, I.FAVORITES, I.ADDRESS, R.SCORE
FROM    REST_INFO I, 
        (SELECT REST_ID, ROUND(AVG(REVIEW_SCORE),2) AS SCORE
         FROM   REST_REVIEW
         GROUP BY REST_ID) R
WHERE   1=1
AND     I.REST_ID=R.REST_ID
AND     I.ADDRESS LIKE '서울%'
ORDER BY R.SCORE DESC, I.FAVORITES DESC 
;
  • 인라인뷰를 사용한 쿼리

🤜 풀이코드2

-- 식당 ID, 식당 이름, 음식 종류, 즐겨찾기 수, 주소, 리뷰 평균 점수
SELECT  I.REST_ID, I.REST_NAME, I.FOOD_TYPE, I.FAVORITES, I.ADDRESS, ROUND(AVG(R.REVIEW_SCORE),2) AS SCORE
FROM    REST_INFO I, REST_REVIEW R
WHERE   1=1
AND     I.REST_ID=R.REST_ID
AND     I.ADDRESS LIKE '서울%'
GROUP BY I.REST_ID, I.REST_NAME, I.FOOD_TYPE, I.FAVORITES, I.ADDRESS
ORDER BY SCORE DESC, I.FAVORITES DESC 
;

ps. 다른 코드들을 보니, 인라인뷰를 사용하지 않고 바로 JOIN한 다음, REST_ID로 GROUP BY 해주고 평균값을 계산해줬다.
이 2개의 코드 중에서 뭐가 더 최적화된 쿼리인것인가..!

🔎 서브쿼리 명칭에 대해서 간단하게 정리해보기

위치이름
SELECT절스칼라 서브쿼리
FROM절인라인뷰
WHERE절중첩서브쿼리

ref.
Oracle 서브쿼리 정리

profile
log my moments 'u')/

0개의 댓글