728x90
https://school.programmers.co.kr/learn/courses/30/lessons/131118?language=oracle
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
JOIN, GROUP BY 등을 사용해야하는 SELCT 문제이다.
각 테이블에서 원하는 정보들을 뽑아 조인하면 되는 문제.
방법 1. 각 테이블에서 원하는 정보 추출 후 JOIN
1. REST_INFO 테이블에서 서울인 정보들만 추출
2. REST_REVIEW 테이블에서 SCORE의 평균 추출
3. 두 테이블 조인
SELECT
RI.REST_ID,
RI.REST_NAME,
RI.FOOD_TYPE,
RI.FAVORITES,
RI.ADDRESS,
ROUND(RR.SCORE, 2) AS SCORE
FROM
(
SELECT *
FROM REST_INFO
WHERE ADDRESS LIKE '서울%'
) RI
JOIN
(
SELECT REST_ID, AVG(REVIEW_SCORE) AS SCORE
FROM REST_REVIEW
GROUP BY REST_ID
) RR
ON RI.REST_ID = RR.REST_ID
ORDER BY SCORE DESC, RI.FAVORITES DESC;
먼저 조인 후 원하는 값 추출
1. REST_ID 가 같은 것으로 JOIN
2. 특정값들로 그루핑
3. 서울에 있는 것을 추출
SELECT RR.REST_ID,REST_NAME,
FOOD_TYPE, FAVORITES,
ADDRESS,
ROUND(AVG(REVIEW_SCORE), 2) AS SCORE
FROM REST_INFO RI
JOIN REST_REVIEW RR
ON RI.REST_ID = RR.REST_ID
GROUP BY RR.REST_ID,REST_NAME,
FOOD_TYPE,
FAVORITES,
ADDRESS
HAVING ADDRESS LIKE '서울%'
ORDER BY SCORE DESC, FAVORITES DESC;
위 코드에서 MySQL과 ORACLE 의 GROUP BY 전략에 대한 차이가 들어난다. 위 코드에선 그룹바이에서 REST_ID 뿐 아니라 SELECT 절에 들어가야하는 모든 값을 그루핑했다. 하지만 MySQL에서는 REST_ID만해도 오류가 안나지만 ORACLE은 오류가 난다. 이것은 따로 포스팅해야할 것 같다.
'프로그래머스 풀이 > Lv 4' 카테고리의 다른 글
[프로그래머스 SQL] 년 월 성별 별 상품 구매 회원 수 구하기 ORACLE (0) | 2025.03.04 |
---|---|
[프로그래머스 SQL] 저자 별 카테고리 별 매출액 집계하기 (ORACLE) (0) | 2025.03.03 |
[프로그래머스 SQL] 5월 식품들의 총매출 조회하기 [ORACLE] (0) | 2025.01.25 |
[프로그래머스 SQL] 식품분류별 가장 비싼 식품의 정보 조회하기 (0) | 2024.11.29 |
프로그래머스 - [3차]자동완성 (C++) (0) | 2023.02.24 |