중첩 서브쿼리로 조건에 맞는 행을 필터링하는 문제다.
필요 정보
-- KEY 값은 MEMEBER_ID
-- 어떤 JOIN을 사용해야 할까?: 리뷰를 작성한 회원만 확인할 수 있도록 INNER JOIN
-- 서브쿼리로 가장 많은 리뷰를 적은 MEMBER_ID 파악
-- WHERE를 사용해서 MEMBER_ID가 일치하는 행의 NAME, TEXT, DATE 도출
첫번째 서브쿼리
리뷰 데이터 테이블에 있는 멤버 아이디 별 리뷰 개수 구하기
SELECT
MEMBER_ID, COUNT(*) AS CNT
FROM REST_REVIEW
GROUP BY MEMBER_ID

두번째 서브쿼리
최대 리뷰 개수 구하기
SELECT
MAX(CNT)
FROM
(SELECT
MEMBER_ID, COUNT(*) AS CNT
FROM REST_REVIEW
GROUP BY MEMBER_ID) AS T

세번째 서브쿼리
최대 리뷰 개수와 동일한 리뷰를 작성한 MEMBER_ID 찾기
SELECT
MEMBER_ID
FROM REST_REVIEW
GROUP BY MEMBER_ID
HAVING COUNT(MEMBER_ID) = # MEMBER_ID가 MAX(CNT)와 동일한 것만 추출한다.
(SELECT
MAX(CNT)
FROM
(SELECT
MEMBER_ID, COUNT(*) AS CNT
FROM REST_REVIEW
GROUP BY MEMBER_ID) AS T)

네번째 서브쿼리
위에서 구한 MEMBER_ID와 동일한 MEMBER_ID들의 고객명, 리뷰 텍스트, 날짜 구하기
SELECT
MP.MEMBER_NAME,
RR.REVIEW_TEXT,
DATE_FORMAT(RR.REVIEW_DATE, '%Y-%m-%d') AS REVIEW_DATE
FROM MEMBER_PROFILE AS MP
JOIN REST_REVIEW AS RR
ON MP.MEMBER_ID = RR.MEMBER_ID
WHERE RR.MEMBER_ID IN
(SELECT
MEMBER_ID
FROM REST_REVIEW
GROUP BY MEMBER_ID
HAVING COUNT(MEMBER_ID) =
(SELECT
MAX(CNT)
FROM
(SELECT
MEMBER_ID, COUNT(*) AS CNT
FROM REST_REVIEW
GROUP BY MEMBER_ID) AS T))
ORDER BY REVIEW_DATE, REVIEW_TEXT

'Coding Test' 카테고리의 다른 글
| [SQL] 특정 기간 대여 가능한 자동차들의 대여비용 구하기 (0) | 2025.09.17 |
|---|---|
| [SQL] 입양 시각 구하기(2) (0) | 2025.09.17 |
| [SQL] 헤비 유저가 소유한 장소 (1) | 2025.09.01 |
| [SQL] 자동차 평균 대여 기간 구하기 (2) | 2025.09.01 |
| [python] ISBN (1) | 2025.08.28 |