알고리즘 문제 풀기/sql

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

Fo_rdang 2024. 8. 3. 21:31
반응형

문제 출처 

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

풀이 

1. 리뷰 점수의 평균을 계산해야 하기 때문에 `REST_REVIEW` 테이블의 데이터에 기반한 집계 작업이 필요하다. 

=> `REST_REVIEW` 테이블을 기준으로 그룹화를 한다. (GROUP BY A.REST_ID)

 

2. INNER JOIN을 사용해야 한다. 

- INNER JOIN은 두 테이블에서 일치하는 레코드만 반환한다. 

- 이 쿼리에서는 `REST_REVIEW` 테이블에 리뷰가 있고, `REST_INFO` 테이블에 해당 레스토랑의 정보가 있는 경우에만 데이터를 반환한다. 

- 쿼리에서 `INNER JOIN`은 `JOIN`으로 간단히 표현한다. 

- ex) `SELECT * FROM A JOIN B ON A.id = B.id` 

 

3. INNGER JOIN 사용 이유 + 

- 1) `REST_REVIEW` 테이블의 리뷰와 `REST_INFO` 테이블의 레스토랑 정보가 일치해야 한다. 즉 리뷰가 없는 레스토랑 정보나 레스토랑 정보가 없는 리뷰는 쿼리 결과에 포함되지 않아야 한다. 

- 2) 레스토랑 주소가 `서울`로 시작하는 경우만 반환해야 한다. 이는 `REST_INFO` 테이블의 주소 컬럼에 의존한다. 이 조건에 만족되지 않는 레코드는 결과에서 제외 

정답 

SELECT A.REST_ID, B.REST_NAME, B.FOOD_TYPE, B.FAVORITES, B.ADDRESS, ROUND(AVG(A.REVIEW_SCORE),2) AS SCORE
FROM REST_REVIEW AS A 
JOIN REST_INFO B ON A.REST_ID = B.REST_ID 
GROUP BY A.REST_ID 
HAVING B.ADDRESS LIKE '서울%'
ORDER BY SCORE DESC, B.FAVORITES DESC;
반응형