코딩테스트_SQL
250423 프로그래머스 서울에 위치한 식당 목록 출력하기
jihye0e
2025. 4. 24. 00:45
[문제]
REST_INFO와 REST_REVIEW 테이블에서 서울에 위치한 식당들의 식당 ID, 식당 이름, 음식 종류, 즐겨찾기수, 주소, 리뷰 평균 점수를 조회하는 SQL문을 작성해주세요. 이때 리뷰 평균점수는 소수점 세 번째 자리에서 반올림 해주시고 결과는 평균점수를 기준으로 내림차순 정렬해주시고, 평균점수가 같다면 즐겨찾기수를 기준으로 내림차순 정렬해주세요.
[풀이]
1) REST_ID, REST_NAME, FOOD_TYPE, FAVORITES, ADDRESS, SCORE 조회
2) REST_INFO 테이블과 REST_REVIEW 테이블 조인
3) 리뷰 점수 - 평균(AVG()), 소수점(ROUND()) 함수 사용
4) 식당마다 리뷰 여러개 존재하므로, 식당ID 별로 그룹화하여 리뷰 평균점수 출력하기
5) 평균점수 내림차순, 즐겨찾기수 내림차순 정렬
[오답 분석하기]
1) 문자열 자르기
** SUBSTR(문자열, 시작 위치, 길이)
- 주소 예시
: 서울특별시 강서구 가로공원로76가길, 서울시 강남구 신사동 627-27 등
'서울'에 위치한 식당 정보를 조회하는건데, 주소는 '서울특별시', '서울시'로 일정하지 않음.
=> 공통적인 인덱스 위치인 '서울'까지 자르기
[정답]
SELECT RI.REST_ID, RI.REST_NAME, RI.FOOD_TYPE,
RI.FAVORITES, RI.ADDRESS,
ROUND(AVG(RR.REVIEW_SCORE), 2) SCORE
FROM REST_INFO RI JOIN REST_REVIEW RR
ON RI.REST_ID = RR.REST_ID
WHERE SUBSTR(RI.ADDRESS, 1, 2) = '서울' -- 서울특별시, 서울시
GROUP BY RI.REST_ID
ORDER BY 6 DESC, 4 DESC;