본문 바로가기

SQL

[SQL 문제풀이] 서울에 위치한 식당 목록 출력하기-프로그래머스

문제링크

 

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

 

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

 

프로그래머스

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

programmers.co.kr

 

풀이

처음에 join을 사용해서 풀어야할까 고민했지만 join을 쓰면 복잡할 것 같아서 서브 쿼리 방식이 더 나을 것 같다고 생각하였다. 

 

1. 가장 먼저 서울에 위치한 식당 조건을 작성하였다.

2. 리뷰 평균 점수를 구하는 서브쿼리를 작성하고 AVG , ROUND 함수를 사용하여 평균값과 반올림을 하였다.

3. SELECT문을 한번 감싸서 다시 한번 SELECT 문을 만들고 SCORE 값이 없는 데이터를 나오지 않게 NOT NULL 조건을 추가하였다.

4. 마지막으로 평균점수를 기준 내림차순 , 즐겨찾기수를 기준으로 내림차순 정렬 하였다.  

 

쿼리

SELECT REST_ID , REST_NAME , FOOD_TYPE , FAVORITES , ADDRESS , SCORE  
FROM (
SELECT 
A.REST_ID , 
A.REST_NAME ,
(SELECT ROUND(AVG(REVIEW_SCORE),2) FROM REST_REVIEW B WHERE B.REST_ID = A.REST_ID ) AS SCORE,
A.FAVORITES,
A.FOOD_TYPE,
A.ADDRESS
FROM
REST_INFO A
WHERE
A.ADDRESS LIKE '서울%'
)
WHERE SCORE IS NOT NULL
ORDER BY SCORE DESC , FAVORITES DESC;