https://school.programmers.co.kr/learn/courses/30/lessons/131118
문제를 읽고 생각한 문제풀이 순서는 다음과 같다
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
'SQL > 문제풀이' 카테고리의 다른 글
[프로그래머스] 상품별 오프라인 매출 구하기 (0) | 2024.01.02 |
---|---|
[프로그래머스] 자동차 종류 별 특정 옵션이 포함된 자동차 수 구하기 (0) | 2023.12.28 |
[프로그래머스] 3월에 태어난 여성 회원 목록 출력하기 (0) | 2023.12.27 |
[프로그래머스] 동명 동물 수 찾기 (0) | 2023.12.27 |
[프로그래머스] 입양 시각 구하기 (1) (0) | 2023.12.26 |