오늘의 문제풀이 ~ ^ㅁ^
프로그래머스 코딩테스트 연습에 있는
<서울에 위치한 식당 목록 출력하기> 입니다.
이 문제에서 포인트는
리뷰 정보와 JOIN하고 집계함수를 사용하여
평균 점수를 계산할 줄 알아야 합니다!
https://school.programmers.co.kr/learn/courses/30/lessons/131118
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
🧩 문제 설명
이번 문제는 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로만 감싸져 있으면
에러가 나거나 잘못된 결과가 나올 수 있슴...!
- MySQL은 SELECT 절에 나온 모든 컬럼이
- 평균 점수 내림차순, 즐겨찾기 수 내림차순으로 정렬!
✅ 최종 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;
'SQL' 카테고리의 다른 글
[프로그래머스/MySQL] 대장균들의 자식의 수 구하기 (LEFT JOIN + COUNT 응용) (0) | 2025.04.06 |
---|---|
[TIL] Leetcode SQL 50 오답노트 - 이동평균 구할 때 쉬운 window 함수 (0) | 2025.03.05 |
RFM 고객 세분화 분석이란? + The look ecommerce 데이터로 SQL 구현, Tableau 시각화까지 (1) | 2024.03.22 |
Streamlit과 BigQuery 연동 (with Google Cloud Platfrom) (1) | 2023.10.18 |
PostgreSQL 기초 실습 및 개념 (0) | 2023.10.13 |