728x90
https://school.programmers.co.kr/learn/courses/30/lessons/131124
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
이 문제의 핵심은 한 테이블에서 가장 많은 결과값을 어떻게 가져오느냐? 이다.
가장 많은 리뷰의 멤버아이디를 찾는 것이 관건인데
오라클은 LIMIT 가 없기 때문에 다음과 같은 방법을 사용한다
SELECT
MEMBER_ID
FROM (
SELECT MEMBER_ID
FROM REST_REVIEW
GROUP BY MEMBER_ID
ORDER BY COUNT(*) DESC
)
WHERE ROWNUM = 1
리뷰 테이블에서 멤버아이디로 그룹핑하고 카운트별로 정렬한 다음 ROWNUM = 1 처리하는 것이다.
그런데 왜 ROWNUM 을 굳이 밖에 뺐을까? 이유는 오라클의 처리순서 때문이다.
WHERE → GROUP BY → ORDER BY
순서이기때문에 먼저 ROWNUM 으로 맨위에거만 처리되어 버리기 때문이다.
저것만 하면 끝났다. 이제 조인만하면 된다.
-- 코드를 입력하세요
-- 1. 가장 많은 리뷰 쓴 테이블을 조회
-- 2. 그것과 조인
SELECT A.MEMBER_NAME, B.REVIEW_TEXT, TO_CHAR(B.REVIEW_DATE, 'YYYY-MM-DD') as REVIEW_DATE FROM
MEMBER_PROFILE A JOIN
REST_REVIEW B ON A.MEMBER_ID = B.MEMBER_ID
WHERE A.MEMBER_ID = (
SELECT
MEMBER_ID
FROM (
SELECT MEMBER_ID
FROM REST_REVIEW
GROUP BY MEMBER_ID
ORDER BY COUNT(*) DESC
)
WHERE ROWNUM = 1
)
ORDER BY REVIEW_DATE , B.REVIEW_TEXT
'프로그래머스 풀이 > Lv 4' 카테고리의 다른 글
| [프로그래머스] 특정 기간동안 대여 가능한 자동차들의 대여비용 구하기 (ORACLE) (0) | 2026.04.04 |
|---|---|
| [프로그래머스 SQL] 주문량이 많은 아이스크림들 조회하기 (ORACLE) (0) | 2025.03.06 |
| [프로그래머스 SQL] 우유와 요거트가 담긴 장바구니 (ORACLE) (0) | 2025.03.05 |
| [프로그래머스 SQL] 년 월 성별 별 상품 구매 회원 수 구하기 ORACLE (0) | 2025.03.04 |
| [프로그래머스 SQL] 저자 별 카테고리 별 매출액 집계하기 (ORACLE) (0) | 2025.03.03 |