https://school.programmers.co.kr/learn/courses/30/lessons/131118
코드설명
SELECT + JOIN + LIKE 를 활용합니다.
- SELECT 문:
- ROUND(AVG(RR.REVIEW_SCORE), 2) AS REVIEW_SCORE: 이 부분은 리뷰 점수의 평균을 계산하고 그 값을 반올림하여 "REVIEW_SCORE"라는 별칭으로 지정합니다.
- FROM 절:
- FROM REST_INFO AS RI: 이 부분은 "REST_INFO" 테이블에 대한 별칭 "RI"를 생성합니다.
- INNER JOIN REST_REVIEW AS RR ON RI.REST_ID = RR.REST_ID: 이 부분은 "REST_REVIEW" 테이블과 "REST_INFO" 테이블을 "REST_ID"를 기준으로 INNER JOIN합니다.
- WHERE 절:
- WHERE RI.ADDRESS LIKE '서울%': 이 부분은 "서울"로 시작하는 주소를 가진 레스토랑만 선택하는 조건입니다.
- GROUP BY 절:
- GROUP BY RI.REST_ID: 이 부분은 "REST_ID"를 기준으로 그룹화합니다. 이는 각 레스토랑에 대한 평균 리뷰 점수를 계산하기 위한 그룹화입니다.
- HAVING 절:
- HAVING RI.ADDRESS LIKE '서울%': 이 부분은 그룹화된 결과에서 "서울"로 시작하는 주소를 가진 레스토랑만 선택하는 조건입니다.
- ORDER BY 절:
- ORDER BY REVIEW_SCORE DESC, RI.FAVORITES DESC: 이 부분은 "REVIEW_SCORE"를 기준으로 내림차순으로 정렬하고, 그 후에 "FAVORITES"를 기준으로 내림차순으로 정렬합니다.
문제에서 '서울%'로 해야 처리가 올바르게 됩니다. '%서울%'로 할경우 동서울 일경우에도 검색됩니다.
코드
WHERE조건으로 필터링할때.
SELECT RI.REST_ID, RI.REST_NAME, RI.FOOD_TYPE, RI.FAVORITES, RI.ADDRESS, ROUND(AVG(RR.REVIEW_SCORE), 2) AS REVIEW_SCORE
FROM REST_INFO AS RI
INNER JOIN REST_REVIEW AS RR
ON RI.REST_ID = RR.REST_ID
WHERE RI.ADDRESS LIKE '서울%'
GROUP BY RI.REST_ID
ORDER BY REVIEW_SCORE DESC, RI.FAVORITES DESC
HAVING으로 필터링할때.
SELECT RI.REST_ID, RI.REST_NAME, RI.FOOD_TYPE, RI.FAVORITES, RI.ADDRESS, ROUND(AVG(RR.REVIEW_SCORE), 2) AS REVIEW_SCORE
FROM REST_INFO AS RI
INNER JOIN REST_REVIEW AS RR
ON RI.REST_ID = RR.REST_ID
GROUP BY RI.REST_ID
HAVING RI.ADDRESS LIKE '서울%'
ORDER BY REVIEW_SCORE DESC, RI.FAVORITES DESC