Save my data

[프로그래머스 SQL] Lv4. 그룹별 조건에 맞는 식당 목록 출력하기 본문

알고리즘 & SQL/프로그래머스

[프로그래머스 SQL] Lv4. 그룹별 조건에 맞는 식당 목록 출력하기

양을 좋아하는 문씨 2025. 1. 28. 09:13
더보기
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

Comments