(프로그래머스) LV3 서울에 위치한 식당 목록 출력하기

chaechae·2023년 1월 17일
0

코딩테스트(SQL) 

목록 보기
3/22
post-thumbnail

LV3. 서울에 위치한 식당 목록 출력하기

문제 )
REST_INFOREST_REVIEW 테이블에서 서울에 위치한 식당들의 식당 ID, 식당 이름, 음식 종류, 즐겨찾기수, 주소, 리뷰 평균 점수(SCORE)를 조회하는 SQL문을 작성해주세요. 이때 리뷰 평균점수는 소수점 세 번째 자리에서 반올림 해주시고 결과는 평균점수를 기준으로 내림차순 정렬해주시고, 평균점수가 같다면 즐겨찾기수를 기준으로 내림차순 정렬해주세요.
(자세한 테이블 정보는 프로그래머스에 있습니다.)

# 리뷰평균점수 소수점 3번째 자리 (컬럼명: SCORE)
# 평균점수 내림차순, 즐겨찾기 내림차순

WITH score AS( SELECT REST_ID
                    , ROUND(AVG(REVIEW_SCORE),2) AS SCORE
                FROM REST_REVIEW
                GROUP BY REST_ID
             )

SELECT b.REST_ID
    , b.REST_NAME
    , b.FOOD_TYPE
    , b.FAVORITES
    , b.ADDRESS
    , a.SCORE
FROM score a
    LEFT JOIN REST_INFO b ON a.REST_ID = b.REST_ID 
WHERE ADDRESS LIKE "서울%"
ORDER BY SCORE DESC, FAVORITES DESC

시나리오

REST_REVIEW 테이블에서 필요한 정보는 REST_ID 와 리뷰 평균 점수(SCORE)입니다. 이 둘을 구한 테이블을 score라는 이름의 서브쿼리로 만들었습니다. 또한 모든 식당 정보가 아니라 평점이 존재하는 서울 식당 정보만 필요하니 score 테이블을 기준으로 REST_INFO 테이블과 결합 한후 "서울%"로 시작하는 식당만 뽑으면 정답입니다.

# 첫번째 시도 했을 때 with절을 이용하여 결합하여 줬었는데
# 굳이 그럴필요 없었다!

SELECT REST_ID
	, REST_NAME
    , FOOD_TYPE
    , FAVORITES
    , ADDRESS
    , round(avg(REVIEW_SCORE),2) as SCORE
FROM REST_INFO i JOIN REST_REVIEW r USING (REST_ID)
WHERE ADDRESS LIKE '서울%'
GROUP BY REST_ID
order by SCORE desc, FAVORITES desc

여기서 JOIN을 할때 보통 ON을 쓰기 마련인데, USING을 이용했다. 그이유는?
JOIN 할 두개의 테이블에 같은 컬럼이 있는 경우 USING을 쓴다! 다른 경우 ON을 사용!

두번째 방법의 경우 일단 REVIEW를 다 JOIN 시키고 리뷰평균을 구하는 방법이고
내가 쓴 첫번째 방법은 선 평균 SCORE 후 결합 방법을 이용한 방법이다!

profile
게임 혹은 다양한 컨텐츠가 있는 곳을 좋아합니다. 시리즈를 참고하시면 편하게 글을 보실 수 있습니다🫠

0개의 댓글