본문 바로가기
Algorithm/프로그래머스

[프로그래머스][SQL] 그룹별 조건에 맞는 식당 목록 출력하기(131124)

by 세류오 2023. 3. 9.

📦 문제

 

프로그래머스

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

programmers.co.kr


📦 문제 풀이

리뷰를 가장 많이 작성한 회원을 가장먼저 구해야 겠다 싶어서 GROUP BY를 사용하여 쿼리 작성

SELECT MEMBER_ID
FROM REST_REVIEW
GROUP BY MEMBER_ID

 

회원 중 가장 많이 리뷰를 작성한 사람을 찾아야했기 때문에 GROUP BY에서 필터링 할 때 사용하는 HAVING을 이용, 리뷰를 가장 많이 쓴 횟수를 조회하는 SELECT문을 생성하여 조회 후 MEMBER_ID만 조회

SELECT MEMBER_ID
  FROM REST_REVIEW
  GROUP BY MEMBER_ID
  HAVING COUNT(REVIEW_TEXT) = (SELECT MAX(COUNT(MEMBER_ID)) 
                                FROM REST_REVIEW
                                GROUP BY MEMBER_ID)

 

방금전 값을 구한 MEMBER_ID를 IN조회문에 넣고 나머지 SELECT 조건대로 값을 구해주기.

SELECT A.MEMBER_NAME, B.REVIEW_TEXT, TO_CHAR(B.REVIEW_DATE, 'yyyy-mm-dd' )
  FROM MEMBER_PROFILE A,
       REST_REVIEW B
  WHERE A.MEMBER_ID = B.MEMBER_ID
    AND B.MEMBER_ID IN (리뷰를 가장 많이 쓴 MEMBER_ID쿼리)
ORDER BY A.MEMBER_NAME, B.REVIEW_DATE

전체 코드

SELECT A.MEMBER_NAME, B.REVIEW_TEXT, TO_CHAR(B.REVIEW_DATE, 'yyyy-mm-dd' )
FROM MEMBER_PROFILE A,
     REST_REVIEW B
WHERE A.MEMBER_ID = B.MEMBER_ID
AND B.MEMBER_ID IN (SELECT MEMBER_ID
                      FROM REST_REVIEW
                      GROUP BY MEMBER_ID
                      HAVING COUNT(REVIEW_TEXT) = (SELECT MAX(COUNT(MEMBER_ID)) 
                                                    FROM REST_REVIEW
                                                    GROUP BY MEMBER_ID)
                    )
ORDER BY A.MEMBER_NAME, B.REVIEW_DATE