MySQL 프로그래머스 | 그룹별 조건에 맞는 식당 목록 출력하기

728x90

 

문제

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

  • 리뷰를 가장 많이 작성한 회원리뷰들을 조회하는 SQL문 작성
  • 리뷰 작성일 기준 오름차순, 리뷰 작성일이 같다면 리뷰 텍스트 기준 오름차순 정렬
  • 쿼리 결과 : 회원 이름, 리뷰 텍스트, 리뷰 작성일

 

테이블

MEMBER_PROFILE
REST_REVIEW

 

 

풀이과정

  • 최대 리뷰 작성 수를 가진 회원 아이디를 찾은 뒤 해당 회원 아이디를 가진 회원의 이름, 리뷰 내용, 리뷰 작성 날짜를 조회함
    • 최대 리뷰 작성 수 : COUNT(각 회원 별 리뷰 작성 수 카운트 : 서브쿼리2) = MAX(각 회원 별 리뷰 작성 수 카운트 : 서브쿼리1
    • 최대 리뷰 작성 수를 가진 회원 아이디 : MEMBER_ID  IN(최대 리뷰 작성 수를 가진 회원 아이디 : 서브쿼리3)
    • 위 두 조건에 부합한  회원 아이디와 매칭되는 회원 이름, 리뷰 내용, 리뷰 작성 날짜 조회
    • 리뷰 작성 날짜 오름차순, 리뷰 내용 오름차순 정렬해주면 끝! 

# 정답

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SELECT MP.MEMBER_NAME, 
       RR.REVIEW_TEXT, 
       DATE_FORMAT(RR.REVIEW_DATE, '%Y-%m-%d') REVIEW_DATE
FROM REST_REVIEW RR
JOIN MEMBER_PROFILE MP ON RR.MEMBER_ID = MP.MEMBER_ID
WHERE RR.MEMBER_ID IN (SELECT MEMBER_ID
                       FROM REST_REVIEW
                       GROUP BY MEMBER_ID
                       HAVING COUNT(REVIEW_ID) = (SELECT MAX(CRI) 
                                                  FROM (SELECT MEMBER_ID, COUNT(REVIEW_ID) CRI 
                                                        FROM REST_REVIEW 
                                                        GROUP BY MEMBER_ID) A -- 서브쿼리1 : 각 회원의 리뷰 작성 수
                                                 ) -- 서브쿼리2: 최대 리뷰 작성 수
                      ) -- 서브쿼리3: IN(최대 리뷰 작성 수를 보유한 회원 아이디)
ORDER BY REVIEW_DATE, RR.REVIEW_TEXT
cs
728x90

댓글