문제 풀이/프로그래머스 SQL

그룹별 조건에 맞는 식당 목록 출력하기

열심히 해 2024. 11. 11. 10:18

https://school.programmers.co.kr/learn/courses/30/lessons/131124

 

 

 

CTE - WITH 절을 이용해서 임시 테이블 만들기

WITH CTE AS (select a.MEMBER_NAME
     , count(*) as review_cnt
from MEMBER_PROFILE a
        JOIN
     REST_REVIEW b ON a.MEMBER_ID = b.MEMBER_ID
group by a.MEMBER_NAME),

CTE2 AS (select a.MEMBER_NAME,
                b.REVIEW_TEXT,
                b.REVIEW_DATE,
                c.review_cnt
from MEMBER_PROFILE a
        JOIN
     REST_REVIEW b ON a.MEMBER_ID = b.MEMBER_ID
        JOIN
     CTE c ON a.MEMBER_NAME = c.MEMBER_NAME)

SELECT MEMBER_NAME
     , REVIEW_TEXT
     , DATE_FORMAT(REVIEW_DATE, '%Y-%m-%d')
FROM CTE2 a
       LEFT JOIN
    (select MAX(review_cnt) as max_cnt
    from CTE2) b ON a.review_cnt = b.max_cnt
WHERE max_cnt is NOT NULL
ORDER BY REVIEW_DATE, REVIEW_TEXT


--출처 : https://hmm06.tistory.com/103

 

 

RANK() 함수 사용하기

WITH MEMBER_RANK AS (
    SELECT MEMBER_ID, RANK() OVER (ORDER BY COUNT(MEMBER_ID) DESC) RNK
    FROM REST_REVIEW
    GROUP BY MEMBER_ID 
)
SELECT MEMBER_NAME,	REVIEW_TEXT, DATE_FORMAT(REVIEW_DATE, '%Y-%m-%d') REVIEW_DATE
FROM MEMBER_RANK RA JOIN MEMBER_PROFILE P 
ON RA.MEMBER_ID = P.MEMBER_ID 
JOIN REST_REVIEW R ON R.MEMBER_ID = P.MEMBER_ID 
WHERE RA.RNK = 1
ORDER BY 3, 2

-- 출처: https://20240228.tistory.com/269