반응형
반응형

출저 : 프로그래머스

 

JOIN

문제풀이

 

1. REST_REVIEW  테이블에서 ID별 개수 뽑기

SELECT MEMBER_ID, COUNT(MEMBER_ID) AS CMI FROM REST_REVIEW 
GROUP BY MEMBER_ID

 

2. REST_REVIEW  테이블과 ID별 개수뽑은 테이블 결합

SELECT C.MEMBER_NAME, A.REVIEW_TEXT, A.REVIEW_DATE, A.MEMBER_ID, B.CMI FROM REST_REVIEW AS A
LEFT JOIN

         (SELECT MEMBER_ID, COUNT(MEMBER_ID) AS CMI FROM REST_REVIEW GROUP BY MEMBER_ID ) 

AS B ON A.MEMBER_ID = B.MEMBER_ID

 

※ SELECT에서 선택한 컬럼명은 제가 보고싶은 컬럼명들만 선별했음, 본인에 따라 바꾸기

 

 

3. MEMBER_PROFILE 테이블과 추가 결합

SELECT C.MEMBER_NAME, A.REVIEW_TEXT, A.REVIEW_DATE, A.MEMBER_ID, B.CMI FROM REST_REVIEW AS A

LEFT JOIN 

         (SELECT MEMBER_ID, COUNT(MEMBER_ID) AS CMI FROM REST_REVIEW GROUP BY MEMBER_ID )

          AS B ON A.MEMBER_ID = B.MEMBER_ID

RIGHT JOIN MEMBER_PROFILE AS C ON A.MEMBER_ID = C.MEMBER_ID

 

※ LEFT로 조인 시 MEMBER_PROFILE 에 이름이 없는 칸이 존재, RIGHT 로 공백 없앰

 

4. WITH 함수를 사용하여 중간결과 확인

WITH RSS AS 

          (SELECT C.MEMBER_NAME, A.REVIEW_TEXT, A.REVIEW_DATE, A.MEMBER_ID, B.CMI 

           FROM REST_REVIEW AS A
LEFT JOIN

          (SELECT MEMBER_ID, COUNT(MEMBER_ID) AS CMI FROM REST_REVIEW GROUP BY MEMBER_ID ) 

           AS B ON A.MEMBER_ID = B.MEMBER_ID
RIGHT JOIN MEMBER_PROFILE AS C ON A.MEMBER_ID = C.MEMBER_ID )
SELECT * FROM RSS

 

 

5. 조건에 맞게 출력( 테이블에서 리뷰를 가장 많이 작성한 회원의 리뷰들 ), WHERE로 MAX 값 설정

WITH RSS AS 

          (SELECT C.MEMBER_NAME, A.REVIEW_TEXT, A.REVIEW_DATE, A.MEMBER_ID, B.CMI 

           FROM REST_REVIEW AS A
LEFT JOIN

          (SELECT MEMBER_ID, COUNT(MEMBER_ID) AS CMI FROM REST_REVIEW GROUP BY MEMBER_ID ) 

           AS B ON A.MEMBER_ID = B.MEMBER_ID
RIGHT JOIN MEMBER_PROFILE AS C ON A.MEMBER_ID = C.MEMBER_ID )


SELECT MEMBER_NAME, REVIEW_TEXT, 

DATE_FORMAT(REVIEW_DATE, '%Y-%m-%d') AS REVIEW_DATE FROM RSS
WHERE CMI = (SELECT MAX(CMI) FROM RSS)
ORDER BY REVIEW_DATE, REVIEW_TEXT

 

 

 

WITH 테이블 중간중간에 들어간 컬럼 및 AS(별칭)은 제가 보기에 편한걸로 임의작성한거('RSS, CMI 등) 그래서 작성에 영향은 없음

 

요즘 WITH로 테이블을 하나 새로 구축 후 SELECT으로 결과 뽑는 것이 문제풀기에 더 수월한 것 같다 가독성도 무너가 높아지는 것 같고..

 

반응형

+ Recent posts

// 기업0 D-Day (표지) // 기업1 D-Day