DB/SQL

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

뽀루피 2024. 8. 13. 20:05

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

 

프로그래머스

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

programmers.co.kr

 

식당의 정보를 담은 REST_INFO 테이블과 식당의 리뷰 정보를 담은 REST_REVIEW 테이블이 주어진다.

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

 

REST_INFO 테이블

REST_ID VARCHAR(5) FALSE
REST_NAME VARCHAR(50) FALSE
FOOD_TYPE VARCHAR(20) TRUE
VIEWS NUMBER TRUE
FAVORITES NUMBER TRUE
PARKING_LOT VARCHAR(1) TRUE
ADDRESS VARCHAR(100) TRUE
TEL VARCHAR(100) TRUE

 

REST_REVIEW 테이블

REVIEW_ID VARCHAR(10) FALSE
REST_ID VARCHAR(10) TRUE
MEMBER_ID VARCHAR(100) TRUE
REVIEW_SCORE NUMBER TRUE
REVIEW_TEXT VARCHAR(1000) TRUE
REVIEW_DATE DATE TRUE

 

 

 

1. 먼저 리뷰 점수를 식당 정보들과 함께 SELECT 하기위해 식당 정보 테이블과 식당 리뷰 테이블을 조인했다.

2. '서울'에 위치한 식당을 조건으로 하고 있으므로 ADDRESS에 '서울'이 포함된다면 결과를 포함시키도록 조건절을 작성했다.

3. 리뷰 점수에 평균을 내 소수점 셋째자리에서 반올림하라고 했으므로 AVG 함수에 ROUND 함수를 작성하여 소수점 둘째자리까지 나타내도록 했고, 집계함수를 작성했으므로 GROUP BY절로 평균을 구할 행들을 제한해줬다.

4. 마지막으로 평균점수를 기준으로 내림차순, 즐겨찾기수를 기준으로 내림차순을 적용시켰다.

SELECT
I.REST_ID,
I.REST_NAME,
I.FOOD_TYPE,
I.FAVORITES,
I.ADDRESS,
ROUND(AVG(R.REVIEW_SCORE), 2) AS SCORE
FROM REST_INFO AS I
JOIN REST_REVIEW AS R
ON I.REST_ID = R.REST_ID
WHERE SUBSTRING(ADDRESS, 1, 2) = '서울'
GROUP BY 
I.REST_ID,
I.REST_NAME,
I.FOOD_TYPE,
I.FAVORITES,
I.ADDRESS
ORDER BY SCORE DESC, FAVORITES DESC