[SQL] Programmers_JOIN. 그룹별 조건에 맞는 식당 목록 출력하기

Programmers JOIN. 그룹별 조건에 맞는 식당 목록 출력하는 문제를 파헤쳐보자 :)

Sep 8, 2025

1. 문제 설명

1-1. 테이블 설명

1-1-1. MEMBER_PROFILE 테이블

notion image
 
✔️ MEMBER_ID : 회원 ID
✔️ MEMBER_NAME : 회원 이름
✔️ TLNO : 회원 연락처
✔️ GENDER : 성별
✔️ DATE_OF_BIRTH : 생년월일

1-1-2. REST_REVIEW 테이블

notion image
✔️ REVIEW_ID : 리뷰 ID
✔️ REST_ID : 식당 ID
✔️ MEMBER_ID : 회원 ID
✔️ REVIEW_SCORE : 점수
✔️ REVIEW_TEXT : 리뷰 텍스트
✔️ REVIEW_DATE : 리뷰 작성일

1-2. 문제 설명

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

2. 문제 풀이

2-1. 최종 풀이

SELECT P.MEMBER_NAME, R.REVIEW_TEXT, DATE_FORMAT(R.REVIEW_DATE, '%Y-%m-%d') AS REVIEW_DATE FROM MEMBER_PROFILE AS P JOIN REST_REVIEW AS R ON P.MEMBER_ID = R.MEMBER_ID WHERE P.MEMBER_ID = (SELECT MEMBER_ID FROM REST_REVIEW GROUP BY MEMBER_ID ORDER BY COUNT(MEMBER_ID) DESC LIMIT 1) ORDER BY R.REVIEW_DATE, R.REVIEW_TEXT;

2-2. 단계별 풀이

2-2-1. 첫 번째 쿼리 만들기

SELECT MEMBER_ID FROM REST_REVIEW GROUP BY MEMBER_ID ORDER BY COUNT(MEMBER_ID) DESC LIMIT 1
해당 코드를 실행시키면, REST_REVIEW 테이블의 MEMBER_ID 별로 그룹화한 뒤, MEMBER_ID를 카운트 함에 따라, 가장 많은 리뷰를 작성한 한 사람을 반환한다.

2-2-2. 두 번째 쿼리 만들기

SELECT P.MEMBER_NAME, R.REVIEW_TEXT, DATE_FORMAT(R.REVIEW_DATE, '%Y-%m-%d') AS REVIEW_DATE FROM MEMBER_PROFILE AS P JOIN REST_REVIEW AS R ON P.MEMBER_ID = R.MEMBER_ID
해당 코드를 실행시키면, MEMBER_PROFILE 테이블과 REST_REVIEW 테이블을 MEMBER_ID 기준으로 조인 시킨 후, MEMBER_NAME, REVIEW_TEXT, REVIEW_DATE를 반환한다.

2-2-3. 최종 쿼리

SELECT P.MEMBER_NAME, R.REVIEW_TEXT, DATE_FORMAT(R.REVIEW_DATE, '%Y-%m-%d') AS REVIEW_DATE FROM MEMBER_PROFILE AS P JOIN REST_REVIEW AS R ON P.MEMBER_ID = R.MEMBER_ID WHERE P.MEMBER_ID = (SELECT MEMBER_ID FROM REST_REVIEW GROUP BY MEMBER_ID ORDER BY COUNT(MEMBER_ID) DESC LIMIT 1) ORDER BY R.REVIEW_DATE, R.REVIEW_TEXT;
해당 코드를 실행시키면, 리뷰를 가장 많이 작성한 회원의 리뷰들을 조회 가능하며, REVIEW_DATE를 오름차순, REVIEW_TEXT를 오름차순으로 정렬한다.