2025.01.28
[프로그래머스 SQL] Lv4. 그룹별 조건에 맞는 식당 목록 출력하기
더보기
SELECT B.MEMBER_NAME, A.REVIEW_TEXT, DATE_FORMAT(A.REVIEW_DATE, "%Y-%m-%d") AS REVIEW_DATE
FROM REST_REVIEW A
JOIN (
SELECT DENSE_RANK() OVER (ORDER BY COUNT(M.MEMBER_ID) DESC) AS RANKING, M.MEMBER_ID, M.MEMBER_NAME
FROM MEMBER_PROFILE M
JOIN REST_REVIEW R
ON M.MEMBER_ID = R.MEMBER_ID
GROUP BY M.MEMBER_ID
ORDER BY RANKING, REVIEW_DATE, R.REVIEW_TEXT
) B
ON A.MEMBER_ID = B.MEMBER_ID
WHERE B.RANKING = 1
ORDER BY REVIEW_DATE, A.REVIEW_TEXT
서브쿼리 + GROUP BY + DENSE_RANK 를 활용하였고 핵심 아이디어는 이렇습니다.
1. 테이블에서 리뷰를 제일 많이 쓴 사람을 어떻게 판별할까?
▶ 결국에 사람마다 쓴 리뷰 개수를 세야겠군.
▶ GROUP BY + COUNT
2. 개수가 제일 많은 것만 어떻게 가져올까?
▶ 개수를 센 다음 RANK 로 1등을 가져와야겠다.
▶ RANK (DENSE_RANK)
3. GROUP BY를 하면 개수는 잘 세는데 중복 행은 다 제거된다.
▶ 개수만 세는 쿼리를 서브쿼리로 만들어서 메인 쿼리문에 조인시켜야겠다.
▶ 서브쿼리 + JOIN