[Programmers] 010 - 그룹별 조건에 맞는 식당 목록 출력하기

Sunny·2023년 6월 9일
0





: 리뷰를 가장 많이 쓴 사용자의 id 만을 리턴하는 임시 테이블을 선언한 뒤,
REST_REVIEW 테이블을 중심으로 임시테이블을 member_id 로 inner join 하여 해당 회원들의 리뷰만을 가져오고,
회원의 이름을 가져오기 위해 MEMBER_PROFILE 테이블을 left join 하였다.
헌데 처음에는 리뷰를 가장 많이 쓴 사용자의 id가 1개인줄 알고, ORDER BY DESC 한다음에 LIMIT 1 하면 되겠지 생각했는데, 막상 돌려보니 3건이 조회되어 고민하다가 서브쿼리를 이용해 COUNT 가 MAX 인 다수의 레코드를 가져올 수 있도록 하였다.

WITH MEMBER AS (
    SELECT MEMBER_ID
      FROM (
        SELECT MAX(CNT) CNT
          FROM (
            SELECT MEMBER_ID
                 , COUNT(MEMBER_ID) CNT
              FROM REST_REVIEW
             GROUP BY MEMBER_ID
             ORDER BY CNT DESC
        ) SUB_A
     ) A
    INNER JOIN (
        SELECT MEMBER_ID
             , COUNT(MEMBER_ID) CNT
          FROM REST_REVIEW
         GROUP BY MEMBER_ID
         ORDER BY CNT DESC
    ) B
      ON A.CNT = B.CNT
)
SELECT C.MEMBER_NAME
     , A.REVIEW_TEXT
     , DATE_FORMAT(A.REVIEW_DATE, "%Y-%m-%d") REVIEW_DATE
  FROM REST_REVIEW A
 INNER JOIN MEMBER B ON A.MEMBER_ID = B.MEMBER_ID
  LEFT JOIN MEMBER_PROFILE C ON A.MEMBER_ID = C.MEMBER_ID
 ORDER BY REVIEW_DATE, REVIEW_TEXT;

profile
자꾸자꾸 헤엄치는 중

0개의 댓글