728x90
반응형
안녕하세요!
오늘은 프로그래머스 SQL 고득점 Kit 중 SELECT 분야의 '서울에 위치한 식당 목록 출력하기' 문제 리뷰를 진행하겠습니다.
문제는 아래 링크에서 확인해주시면 됩니다.
https://school.programmers.co.kr/learn/courses/30/lessons/131118
- 문제 설명
- 문제
- 예시
728x90
- 문제를 파악하며 쿼리 생각하기
예시에서 볼 수 있듯이, 저희가 문제에서 SELECT 해야하는 부분은 식당의
- 식당 ID : REST_ID
- 식당 이름 : REST_NAME
- 음식 종류 : FOOD_TYPE
- 즐겨찾기 수 : FAVORITES
- 주소 : ADDRESS
- 리뷰 평균 점수 : AVG(REVIEW_SCORE)
총 6개인 것을 확인할 수 있습니다.
다음으로 JOIN 해야하는 부분은
- REST_INFO 와 REST_REVIEW를 REST_ID를 기준으로 동시 만족 : JOIN REST_REVIEW b ON a.REST_ID=b.REST_ID
→ a는 REST_INFO 의 별칭입니다.
→ REST_INFO와 REST_REVIEW을 둘 다 만족해야 하기 때문에 내부 조인을 사용해야 합니다.
→ 내부 조인이기 때문에 REST_REVIEW에 REST_INFO를 JOIN하셔도 괜찮습니다.
위와 같은 것을 확인할 수 있습니다.
다음으로 저희가 WHERE 조건으로 확인해야 하는 부분은
- 서울에 위치한 식당 : ADDRESS LIKE '서울%'
→ 서울에 위치한 식당의 주소는 '서울시 ~~' 혹은 '서울특별시 ~~' 로 시작하기 때문에 주소에서 서울로 시작하는 문자열을 모두 가지고 와줍니다.
총 1개인 것을 확인할 수 있습니다.
마지막으로 저희가 문제에서 확인해야 하는 부분은
- 리뷰 평균 점수는 소수점 세 번째 자리애서 반올림 : ROUND(AVG(REVIEW_SCORE), 2)
→ ROUND(x, y)는 x를 소수점 y자리 까지 반올림해서 보여주는 함수입니다.
→ 참고로 올림은 CEILING, 내림은 FLOOR을 사용해주시면 됩니다. - 평균 점수 기준 내림차순, 즐겨찾기 수 내림차순 : ORDER BY AVG(REVIEW_SCORE) DESC, FAVORITES DESC
→ ORDER BY는 SELECT에서 진행한 별칭을 사용해도 되기 때문에, AVG(REVIEW_SCORE) 대신 별칭을 사용하시면 좋습니다.
→ ORDER BY는 SELECT에 나온 것을 기준으로 순서를 정렬하기 때문에 SELECT에 있는 컬럼의 순서로 적으셔도 됩니다.
총 2개인 것을 확인할 수 있습니다.
- 쿼리 완성하기
이제 위에서 생각한 쿼리를 SQL 실행 순서에 맞게 배치해주시면 됩니다.
그렇게 완성된 쿼리는 아래와 같습니다.
SELECT a.REST_ID,
REST_NAME,
FOOD_TYPE,
FAVORITES,
ADDRESS,
ROUND(AVG(REVIEW_SCORE), 2) AS SCORE
FROM REST_INFO a
JOIN REST_REVIEW b ON a.REST_ID=b.REST_ID
WHERE ADDRESS LIKE '서울%'
GROUP BY 1, 2, 3, 4, 5
ORDER BY 6 DESC, 4 DESC
궁금한 부분이 있으신 분들은 댓글로 남겨주시면, 답변 드리도록 하겠습니다.
★읽어주셔서 감사합니다★
728x90
반응형
'SQL > 프로그래머스' 카테고리의 다른 글
[SELECT] 조건에 맞는 개발자 찾기 (0) | 2024.09.09 |
---|---|
[GROUP BY] 대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기 (3) | 2024.09.06 |
[GROUP BY] 저자 별 카테고리 매출액 집계하기 (1) | 2024.09.03 |
[JOIN] 있었는데요 없었습니다 (52) | 2024.04.11 |