%서울%
이 아니라 서울%
로 해야한다.-- 식당 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
;
-- 식당 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 서브쿼리 정리