MEMBER_PROFILE와 REST_REVIEW 테이블에서 리뷰를 가장 많이 작성한 회원의
리뷰들을 조회하는 SQL문을 작성해주세요. 회원 이름, 리뷰 텍스트, 리뷰 작성일이
출력되도록 작성해주시고, 결과는 리뷰 작성일을 기준으로 오름차순,
리뷰 작성일이 같다면 리뷰 텍스트를 기준으로 오름차순 정렬해주세요.
WITH R AS(
SELECT MEMBER_ID, DENSE_RANK() OVER(ORDER BY COUNT(MEMBER_ID) DESC) RANKING
FROM REST_REVIEW
GROUP BY MEMBER_ID
)
SELECT MEMBER_NAME, REVIEW_TEXT, DATE_FORMAT(REVIEW_DATE, '%Y-%m-%d') as REVIEW_DATE
FROM MEMBER_PROFILE M
JOIN R ON M.MEMBER_ID = R.MEMBER_ID
JOIN REST_REVIEW RR ON M.MEMBER_ID = RR.MEMBER_ID
WHERE RANKING = 1
ORDER BY REVIEW_DATE, REVIEW_TEXT
with 절을 이용해서 풀었다.
with 절에서 MEMBER_ID를 카운트하고 그룹화한 다음 DENSE_RANK를 통해 MEMBER_ID가 많은 순으로 순위를 매겨줬다. 그리고 메인쿼리에서 각 테이블(WITH 포함)을 모두 조인해주고 RANKING이 1등인 것들을 대상으로 뽑아줬다.\
DENSE_RANK()는 순위 값이 중복된 값이 있더라도 중간에 순위를 건너뛰지 않고 매겨준다.
EX) 1등-1등-2등-3등-3등-4등
ROW_NUMBER()는 중복된 값을 건너뛴다.
WITH 절은 이용하여 가상 테이블을 만들 수 있으며, 이후 조회 시 테이블 명에 가상 테이블명을 넣어주면 간단하게 조회가 가능하다.
'코드카타' 카테고리의 다른 글
[hackerrank] The Report (1) | 2024.01.23 |
---|---|
[leetcode] 1934. Confirmation Rate (0) | 2024.01.22 |
[SQL] 프로그래머스 Lv.3 대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기 (0) | 2023.12.27 |
[SQL]프로그래머스 Lv.4 저자 별 카테고리 별 매출액 집계하기 (0) | 2023.12.26 |
[SQL]프로그래머스 Lv.4주문량이 많은 아이스크림들 조회하기 (0) | 2023.12.26 |