코딩테스트_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;