Post

[Programmers/프로그래머스] SQL High Score Kit : 서울에 위치한 식당 목록 출력하기 (MySQL)

📌 문제


REST_INFOREST_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 없이는 에러 발생


🧩 마무리


  • 핵심: 소숫점 처리 방식, 평균 함수 사용법


🔗 참고한 자료


[SQL] 반올림 함수 ROUND(a, b)