728x90
문제
풀이방법
1. RANK() 함수 사용
RANK() OVER(ORDER BY 랭킹_조건) AS 컬럼명
-- 즉, 특정 테이블에서 특정 조건에 맞춰 RANK 값을 갖는 컬럼을 만드는 함수
-- 예시:
-- INNER JOIN (
-- SELECT JOIN_공통컬럼, RANK() OVER(ORDER BY COUNT(식별자) DESC) AS 컬럼명
-- FROM 테이블 RR
-- GROUP BY 식별자
-- ) AS RRR ON RRR.공통컬럼 LIKE RR.공통컬럼
1. 서브쿼리로 REST_REVIEW 테이블에서 각 MEMBER_ID에 대해 빈도수를 COUNT하여, RANK 컬럼 만들어줌
2. 이 때, MEMBER_ID도 같이 엮어줘야 JOIN이 가능하므로, MEMBER_ID도 SELECT하여 JOIN
3. 메인 쿼리에 REST_REVIEW, 서브쿼리에 MEMBER_PROFILE로 JOIN
4. 첫 번째 서브쿼리에서 얻은 RANK로 WHERE를 통해 1위만 필터링
5. 정렬 조건에 맞춰 출력
나의 코드
-- 출력할 컬럼 선언
SELECT MP.MEMBER_NAME, RR.REVIEW_TEXT, DATE_FORMAT(RR.REVIEW_DATE, "%Y-%m-%d") AS REVIEW_DATE
-- 출력할 컬럼이 들어있는 테이블 선언
FROM REST_REVIEW RR
INNER JOIN MEMBER_PROFILE MP ON MP.MEMBER_ID LIKE RR.MEMBER_ID
-- 같은 테이블에서 특정 컬럼값을 랭킹으로 정렬해서 JOIN시킴 (즉, 랭킹 컬럼을 추가하기 위한 JOIN)
INNER JOIN (
SELECT MEMBER_ID, RANK() OVER(ORDER BY COUNT(MEMBER_ID) DESC) AS REVIEW_RANK
FROM REST_REVIEW RR
GROUP BY MEMBER_ID
) AS RRR ON RRR.MEMBER_ID LIKE RR.MEMBER_ID
-- 랭킹 순에서 1위만 뽑아옴
WHERE RRR.REVIEW_RANK = 1
-- 정렬 조건 선언
ORDER BY RR.REVIEW_DATE, RR.REVIEW_TEXT
레퍼런스 코드
728x90
'알고리즘 저장소 (일반방식과 나만의 풀이) > SQL' 카테고리의 다른 글
[Programmers] no131117: 5월 식품들의 총매출 조회하기 (0) | 2023.03.27 |
---|---|
[Programmers] no131118: 서울에 위치한 식당 목록 출력하기 (0) | 2023.03.27 |
[Programmers] no131532: 년, 월, 성별 별 상품 구매 회원 수 구하기 (0) | 2023.03.24 |
[Programmers] no132204: 취소되지 않은 진료 예약 조회하기 (0) | 2023.03.24 |
[Programmers] no133027: 주문량이 많은 아이스크림들 조회하기 서브쿼리에 서브쿼리로 집계) (0) | 2023.03.24 |