
문제
https://school.programmers.co.kr/learn/courses/30/lessons/131118
풀이
SELECT A.REST_ID, A.REST_NAME, A.FOOD_TYPE, A.FAVORITES, A.ADDRESS, ROUND(AVG(B.REVIEW_SCORE),2) "SCORE"
FROM REST_INFO A
INNER JOIN REST_REVIEW B
ON A.REST_ID = B.REST_ID
WHERE A.ADDRESS REGEXP ('^서울특별시|^서울시')
# WHERE A.ADDRESS REGEXP ('서울특별시|서울시')
GROUP BY A.REST_ID
ORDER BY AVG(B.REVIEW_SCORE) DESC, A.FAVORITES DESC;
서울에 위치한 식당별 정보(리뷰 평균 점수)를 구하는 문제였습니다. WHERE-REGEXP 정규식과 GROUP BY-ROUND(AVG()) 구문을 활용하여 쉽게 해결할 수 있었습니다. 정규식을 활용할 때에 특정단어로 시작하는 데이터를 찾을 때는 REGEXP ('^서울특별시|^서울시') 와 같이 윗꺾쇠를 입력해주고 단어를 포함하는 데이터를 찾을 때는 REGEXP ('서울특별시|서울시') |(or)만 사용하면 된다는 점을 알게되었습니다.🐕🐕🐕
저의 풀이 이외에 아래와 같이
-- [테이블] 1. 식당정보 REST_INFO, 2. 리뷰정보 REST_REVIEW
-- [문제] 서울에 위치한 식당들의 식당 ID, 식당 이름, 음식 종류, 즐겨찾기수, 주소, 리뷰 평균 점수를 조회
-- [조건] 1. 리뷰 평균점수는 소수점 세 번째 자리에서 반올림
-- 2. 평균점수 내림차순, 즐겨찾기수 내림차순
WITH AVG_SCORE AS (
SELECT REST_ID, ROUND(AVG(REVIEW_SCORE), 2) AS SCORE
FROM REST_REVIEW
GROUP BY REST_ID
)
SELECT REST_ID, REST_NAME, FOOD_TYPE, FAVORITES, ADDRESS, SCORE
FROM REST_INFO
JOIN AVG_SCORE USING (REST_ID)
WHERE ADDRESS LIKE '서울%'
ORDER BY SCORE DESC, FAVORITES DESC;
WITH 구문으로 가상테이블을 만들어 JOIN한 방식을 볼 수 있었습니다.
감사합니다.🏄🏄🏄