본문 바로가기
SQL

[프로그래머스/MySQL] 서울에 위치한 식당 목록 출력하기

by 나룽나룽 2025. 4. 10.

오늘의 문제풀이 ~ ^ㅁ^

프로그래머스 코딩테스트 연습에 있는 

<서울에 위치한 식당 목록 출력하기> 입니다.

 

이 문제에서 포인트는

리뷰 정보와 JOIN하고 집계함수를 사용하여

평균 점수를 계산할 줄 알아야 합니다!

https://school.programmers.co.kr/learn/courses/30/lessons/131118

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 


🧩 문제 설명

ChatGPT가 생각하는 서울 식당 거리,,,(너 한글 모르지,,이눔아)

 

이번 문제는 REST_INFO 테이블과 REST_REVIEW 테이블을 이용해서

서울에 있는 식당들 중 리뷰 평균 점수를 구하는 문제~

 

📋 테이블 설명

테이블 이름: REST_INFO

REST_ID 식당 ID
REST_NAME 식당 이름
FOOD_TYPE 음식 종류
VIEWS 조회수
FAVORITES 즐겨찾기 수
PARKING_LOT 주차장 여부
ADDRESS 주소
TEL 전화번호

 

테이블 이름: REST_INFO

REVIEW_ID 리뷰 ID
REST_ID 식당 ID
MEMBER_ID 회원 ID
REVIEW_SCORE 리뷰 점수
REVIEW_TEXT 리뷰 내용
REVIEW_DATE 작성일

 

💡 문제 접근 방법

  • 서울 주소만 필터링하기 : ADRESS LIKE '서울%'
  • 리뷰 정보와 JOIN: REST_ID를 기준으로 조인
  • 집계 함수 사용: SUM(REVIEW_SCORE), COUNT()로 평균 계산
  • ROUND로 소수점 둘째 자리까지 반올림
  • GROUP BY로 식당 단위로 묶기
    • MySQL은 SELECT 절에 나온 모든 컬럼
      GROUP BY에 들어가 있거나
      SUM() 처럼 집계 함수로 감싸져 있어야 합니다!
      레스토랑 별 점수를 구한다고 해서 REST_ID로만 감싸져 있으면
      에러가 나거나 잘못된 결과가 나올 수 있슴...! 
  • 평균 점수 내림차순, 즐겨찾기 수 내림차순으로 정렬!

 

✅ 최종 SQL 코드

WITH REST_CTE AS (
    SELECT I.REST_ID,
           I.REST_NAME,
           I.FOOD_TYPE,
           I.FAVORITES,
           I.ADDRESS,
           SUM(R.REVIEW_SCORE) AS sum_score,
           COUNT(R.REST_ID) AS cnt_review
    FROM REST_INFO I
    INNER JOIN REST_REVIEW R ON I.REST_ID = R.REST_ID
    WHERE I.ADDRESS LIKE '서울%'
    GROUP BY 1, 2, 3, 4, 5
)

SELECT REST_ID,
       REST_NAME,
       FOOD_TYPE,
       FAVORITES,
       ADDRESS,
       ROUND(sum_score / cnt_review, 2) AS SCORE
FROM REST_CTE
ORDER BY SCORE DESC, FAVORITES DESC;