[Programmers/프로그래머스] SQL High Score Kit : 서울에 위치한 식당 목록 출력하기 (MySQL)
📌 문제
REST_INFO
와 REST_REVIEW
테이블에서 서울에 위치한 식당들의 식당 ID, 식당 이름, 음식 종류, 즐겨찾기수, 주소, 리뷰 평균 점수를 조회하는 SQL문을 작성해주세요. 이때 리뷰 평균점수는 소수점 세 번째 자리에서 반올림 해주시고 결과는 평균점수를 기준으로 내림차순 정렬해주시고, 평균점수가 같다면 즐겨찾기수를 기준으로 내림차순 정렬해주세요.
✅ 풀이 SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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
JOIN
REST_REVIEW r ON i.REST_ID = r.REST_ID
WHERE
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;
💡 풀이 포인트
-
JOIN
으로 두 테이블을REST_ID
기준으로 연결-
INNER JOIN
으로 명시하는 것이 가동성이 좋음
-
ROUND(AVG(...), 2)
를 사용해 평균 점수를 소수점 셋째 자리에서 반올림AVG()
는 리뷰들을 평균 내는 함수이므로 반드시GROUP BY
와 함께 사용WHERE i.ADDRESS LIKE '서울%'
로 서울 지역 식당만 필터링-
ORDER BY
를 사용해 리뷰 평균 점수를 기준으로 내림차순 정렬- 평균이 같다면
FAVORITES
로 다시 한 번 내림차순 정렬
- 평균이 같다면
🔍 참고
ROUND(숫자, 2)
→ 소수점 둘째 자리까지 표현, 즉 셋째 자리에서 반올림AVG()
는 집계 함수이므로GROUP BY
없이는 에러 발생
🧩 마무리
- 핵심: 소숫점 처리 방식, 평균 함수 사용법