SQL/문제풀이

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

응엉잉 2023. 12. 27. 11:15

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

 

프로그래머스

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

programmers.co.kr

문제를 읽고 생각한 문제풀이 순서는 다음과 같다

1. rest_info 테이블의 주소 column을 이용해서 서울에 위치한 가게 정보만 뽑아야 함 --> 문자열 함수?

2. rest_info 테이블의 rest_id column과 rest_review 테이블의 rest_id column을 이용해서 2개 테이블을 합쳐야함 --> join?

3. rest_review 테이블에서 식당별 review_score의 평균 점수를 구해야 함 --> GROUP BY?

4. 정렬 등

 

1. SUBSTR() 함수 사용

SUBSTR(column 명 or 문자열, 문자 추출 시작 위치, 추출 문자 개수)

 

시작 번호는 1이다.

SELECT *
FROM rest_info
WHERE SUBSTR(address, 1, 5) = '서울특별시'

 

 

2. LEFT JOIN 사용

SELECT *
FROM rest_info i
    LEFT JOIN rest_review r ON i.rest_id = r.rest_id

실행 결과는 다음과 같다

 

3. GROUP BY 사용

SELECT i.rest_id, AVG(review_score) AS score
FROM rest_info i
    LEFT JOIN rest_review r ON i.rest_id = r.rest_id
WHERE SUBSTR(address, 1, 5) = '서울특별시'
GROUP BY rest_id

score가 안나오는 식당들은 review가 없는 식당이었다

SELECT i.rest_id,
    rest_name,
    food_type,
    favorites,
    address,
    ROUND(AVG(review_score),2) AS score
FROM rest_info i
    LEFT JOIN rest_review r ON i.rest_id = r.rest_id
WHERE SUBSTR(address, 1, 5) = '서울특별시'
    AND review_score IS NOT NULL
GROUP BY i.rest_id
ORDER BY score DESC,
    favorites DESC

 

 

틀렸다 ...

 

찾아보니 주소가 서울특별시로 되어있지 않고, 서울시 ~ 로 되어있는 곳들이 있었다.

이런 경우까지 포함해주기 위해 부분적으로 일치하는 column을 찾을 때 사용하는 LIKE 함수를 활용하여,

WHERE address LIKE '서울%' 로 식을 바꿔주었다.

 

[정답 코드]

SELECT i.rest_id,
    rest_name,
    food_type,
    favorites,
    address,
    ROUND(AVG(review_score),2) AS score
FROM rest_info i
    LEFT JOIN rest_review r ON i.rest_id = r.rest_id
WHERE address like '서울%'
    AND review_score IS NOT NULL
GROUP BY i.rest_id
ORDER BY score DESC,
    favorites DESC