https://school.programmers.co.kr/learn/courses/30/lessons/131124
3번 join
날짜 형식 변경
WITH TEMP AS (
SELECT MEMBER_ID, COUNT(*) AS REVIEW_COUNT
FROM REST_REVIEW
GROUP BY MEMBER_ID
)
SELECT
P.MEMBER_NAME,
R.REVIEW_TEXT,
DATE_FORMAT(R.REVIEW_DATE, '%Y-%m-%d') AS REVIEW_DATE
FROM
TEMP T
LEFT JOIN
MEMBER_PROFILE P ON T.MEMBER_ID = P.MEMBER_ID
JOIN -- INNER JOIN으로 변경하는 것이 더 명확할 수 있습니다.
REST_REVIEW R ON T.MEMBER_ID = R.MEMBER_ID -- 테이블명을 REST_REVIEW로 가정
WHERE
T.REVIEW_COUNT = (SELECT MAX(REVIEW_COUNT) FROM TEMP)
ORDER BY R.REVIEW_DATE, R.REVIEW_TEXT
-- CTE 1: 회원별 리뷰 수 계산
WITH MEMBER_REVIEW_COUNTS AS (
SELECT
MEMBER_ID,
COUNT(*) AS REVIEW_COUNT
FROM
REST_REVIEW
GROUP BY
MEMBER_ID
),
-- CTE 2: 리뷰 수 기준으로 순위(RANK) 매기기
TOP_REVIEWERS AS (
SELECT
MEMBER_ID,
REVIEW_COUNT,
-- 동점자를 모두 1위로 처리하기 위해 DENSE_RANK() 사용
DENSE_RANK() OVER (ORDER BY REVIEW_COUNT DESC) AS RNK
FROM
MEMBER_REVIEW_COUNTS
)
-- 메인 쿼리: 필요한 정보 JOIN 및 최종 필터링
SELECT
P.MEMBER_NAME,
R.REVIEW_TEXT,
DATE_FORMAT(R.REVIEW_DATE, '%Y-%m-%d') AS REVIEW_DATE
FROM
TOP_REVIEWERS T
JOIN
REST_REVIEW R ON T.MEMBER_ID = R.MEMBER_ID
JOIN
MEMBER_PROFILE P ON T.MEMBER_ID = P.MEMBER_ID
WHERE
T.RNK = 1 -- 순위가 1위인 회원만 선택
ORDER BY
R.REVIEW_DATE, R.REVIEW_TEXT;