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

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

몽총한몽이네 2024. 2. 24. 01:53
반응형

WITH A as (SELECT MEMBER_ID,COUNT(MEMBER_ID)as MCV
                FROM REST_REVIEW
                GROUP BY 1
                order by 2 desc
                limit 1)
SELECT MEMBER_NAME, REVIEW_TEXT, 
DATE_FORMAT(REVIEW_DATE,"%Y-%m-%d")REVIEW_DATE
FROM MEMBER_PROFILE as m, REST_REVIEW as r , A
WHERE m.MEMBER_ID = r.MEMBER_ID
AND m.MEMBER_ID= A.MEMBER_ID
ORDER BY 3,2

문제

MEMBER_PROFILE와 REST_REVIEW 테이블에서 리뷰를 가장 많이 작성한 회원의 리뷰들을 조회하는 SQL문을 작성 후 회원 이름, 리뷰 텍스트, 리뷰 작성일이 출력되도록 작성해주시고, 결과는 리뷰 작성일을 기준으로 오름차순, 리뷰 작성일이 같다면 리뷰 텍스트를 기준으로 오름차순 정렬

주의사항
REVIEW_DATE의 데이트 포맷이 예시와 동일해야 정답처리

 

 먼저 리뷰를 가장 많이 작성한 회원을 찾아야 한다. 해당 회원의 데이터를 With 절로 뽑아내서 메인쿼리랑 Inner Join 시켜 필터링 하는것을 목표로 한다. 그러기 위해선 With 절 에서 리뷰 기록인 REST_REVIEW 테이블을 통해 값을 찾아야 한다. REST_REVIEW 테이블에서 가장 값이 많은 MEMBER_ID가 곧 최다 리뷰 회원이다. 따라서 MEMBER ID를 기준으로 그룹하여 COUNT MEMBER_ID 처리 하여 멤버별 값의 수를 구한다. 그 후 그 숫자가 큰것부터 작은 것 순으로 정렬후 상위 1개값을 추출한다. 이러면  리뷰를 가장 많이 작성한 회원을 확인할수있다.

 

 다음으로 메인쿼리에서 MEMBER_PROFILE 과 REST_REVIEW를 연결해 멤버의 리뷰값을 추출 할수있게 MEMBER_ID 기준으로 조인해준다. 그리고 위에서 만든 WITH절의 테이블 A 와도 마찬가지로 MEMBER_ID 기준으로 조인해 준다. 

이렇게 되면 멤버 프로필 - 멤버 리뷰 / 멤버 프로필 - 리뷰가장 많이쓴 멤버 가 서로 연결되어 조건이 걸어져

리뷰를 가장많이 쓴 멤버의 리뷰를 볼수있게 된다. 그 다음 마지막으로 순서를 정렬해 마무리한다.

반응형