프로그래머스 SELECT 3. 서울에 위치한 식당 목록 출력하기
1. 문제 설명

2. 문제

3. 예시


4. 문제 풀이
SELECT a.REST_ID, a.REST_NAME, a.FOOD_TYPE, a.FAVORITES, a.ADDRESS, round(avg(b.REVIEW_SCORE),2) as SCORE
from REST_INFO a inner join REST_REVIEW b
on a.REST_ID = b.REST_ID
where a.ADDRESS like '서울%'
group by a.REST_ID
order by SCORE desc, a.FAVORITES desc;
- 1 Line : 식당 ID, 식당 이름, 음식 종류, 즐겨찾기수, 주소, 평균 평점을 표시
- 식당 정보 테이블, 식당 평가 테이블의 두 곳에서 데이터를 가져와야 함
- 테이블의 별칭을 부여 (REST_INFO a, REST_REVIEW b)
- 평균 평점은 소수점 2자리까지 반영, ‘SCORE’ 별칭 부여
- select a.REST_ID, a.REST_NAME, a.FOOD_TYPE, a.FAVORITES, a.ADDRESS, round(avg(b.REVIEW_SCORE),2) as SCORE
- 2 Line : REST_INFO, REST_REVIEW 테이블을 참조
- 두 테이블에서 예약 ID가 같은 자료만 참조하므로 Inner Join 사용
- from REST_INFO a inner join REST_REVIEW b
- 3 Line : 예약 ID가 같은 데이터들만 연결
- on a.REST_ID = b.REST_ID
- 4 Line : 서울에 있는 식당만 표시해
- where a.ADDRESS Like ‘서울%’
- 5 Line : 식당 별 평점의 평균 → 식당 별 Grouping 필요
- Unique한 REST_ID 사용
- group by a.REST_ID
- 6 Line : 평균 점수를 기준으로 내림차순, 점수가 같다면 즐겨찾기수를 기준으로 오름차순 정렬
- order by SCORE asc, a.FAVORITES desc;
5. 결과 확인


Solution
Trouble Shooting
Join하는 속성으로만 Grouping 해야 하는가?
- No! 다른 속성으로도 가능
- 본 문제의 경우 식당 별 평점의 평균을 구해야 하므로 식당을 Grouping해야 하고, 식당을 구분할 수 있는 기준인 REST_ID로 Grouping해야 함

Share article