반응형
문제 출처
https://school.programmers.co.kr/learn/courses/30/lessons/131118
풀이
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;
반응형
'알고리즘 문제 풀기 > sql' 카테고리의 다른 글
프로그래머스: 강원도에 위치한 생산공장 목록 출력하기 - MySQL (0) | 2024.08.06 |
---|---|
프로그래머스: 인기있는 아이스크림 - MySQL (0) | 2024.08.05 |
프로그래머스: 조건에 부합하는 중고거래 댓글 조회하기 - MySQL (0) | 2024.08.04 |
프로그래머스: 3월에 태어난 여성 회원 목록 출력하기 - MySQL (0) | 2024.08.01 |
프로그래머스 SQL: 과일로 만든 아이스크림 고르기 - MYSQL (0) | 2024.07.31 |