DB/SQL오답노트

[SQL/SQL오답노트]LV4.서울에 위치한 식당 목록 출력하기

각시탈코더 2023. 4. 6. 12:12

1.문제

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

 

프로그래머스

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

programmers.co.kr

 

2.정답

SELECT RI.REST_ID, RI.REST_NAME, RI.FOOD_TYPE, RI.FAVORITES, RI.ADDRESS, RR.SCORE
FROM REST_INFO RI
INNER JOIN (
    SELECT REST_ID,ROUND(AVG(REVIEW_SCORE), 2) AS SCORE
    FROM REST_REVIEW
    GROUP BY REST_ID) RR
ON RI.REST_ID = RR.REST_ID
WHERE RI.ADDRESS LIKE '서울%'
ORDER BY RR.SCORE DESC, RI.FAVORITES DESC

 

3.내가 정답을 못 적은 이유

- 문제 전략을 제대로 세우지 못했다. 조인 테이블의 범위를 생각치 못했다.

문제에서 제시된 조건은 크게 세 가지다.

 

①식당은 서울에 위치한다.

②리뷰 평균점수는 소수점 셋째자리에서 반올림한다.

③평균점수를 기준으로 내림차순으로 정렬, 즐겨 찾기 수를 기준으로 내림차순 정렬

 

이런 조건을 충족시키기 위해선 조인을 해야한다. 조인을 해야한다는 생각을 하는 건 어렵지 않았지만, 문제 요구에 맞는 정확한 쿼리를 작성하지 못했다. 세 조건중에 ②조건에 맞춰 조인 대상을 서브쿼리로 작성하면 문제에서 요구하는 테이블을 만드는데에 적합해진다. 이 조건을 만족시켜 쿼리문을 작성한다면 나머지 ①,③ 조건의 쿼리문을 짜는 건 시간문제다. '조인 테이블을 어떻게 문제에 적합한 형태로 만들것인가'가 이 문제에 핵심이라고 볼 수 있다.