[Programmers_SQL] 3. 서울에 위치한 식당 목록 출력하기

문정준's avatar
Feb 26, 2025
[Programmers_SQL] 3. 서울에 위치한 식당 목록 출력하기
💡
프로그래머스 SELECT 3. 서울에 위치한 식당 목록 출력하기

1. 문제 설명

notion image
 

2. 문제

notion image
 

3. 예시

notion image
notion image

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. 결과 확인

notion image
notion image
 

Solution

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

sxias