[MySQL] 그룹별 조건에 맞는 식당 목록 출력하기 - JOIN

Saemi Min·2023년 2월 19일
0

MySQL

목록 보기
13/21
post-thumbnail

LEVEL 4

문제

해당 문제 링크

정답

SELECT A.MEMBER_NAME, B.REVIEW_TEXT, DATE_FORMAT(B.REVIEW_DATE, '%Y-%m-%d') AS REVIEW_DATE FROM MEMBER_PROFILE A
    JOIN REST_REVIEW B ON A.MEMBER_ID = B.MEMBER_ID
    WHERE A.MEMBER_NAME IN (
        SELECT MEMBER_NAME FROM (
            SELECT C.MEMBER_NAME, COUNT(REVIEW_ID) FROM MEMBER_PROFILE C
                JOIN REST_REVIEW D ON C.MEMBER_ID = D.MEMBER_ID
            GROUP BY MEMBER_NAME
        ORDER BY COUNT(REVIEW_ID) DESC LIMIT 1) E
    )
ORDER BY REVIEW_DATE, REVIEW_TEXT

풀이

JOIN을 통해 합치고 리뷰를 가장 많이 작성한 회원을 서브 쿼리문으로 빼서 작성하면 되겠다라는 접근해서 문제를 풀었지만, 잘 안풀리고 오류가 나서 결국 다른 사람의 코드를 참고하여 원래 내가 작성하는 방식으로 바꿔 문제를 풀었다.

하나씩 코드를 해석해보자

  • 가장 안쪽에 있는 쿼리문 해석

 SELECT C.MEMBER_NAME, COUNT(REVIEW_ID) FROM MEMBER_PROFILE C
                JOIN REST_REVIEW D ON C.MEMBER_ID = D.MEMBER_ID
            GROUP BY MEMBER_NAME

 SELECT C.MEMBER_NAME, COUNT(REVIEW_ID) FROM MEMBER_PROFILE C
                JOIN REST_REVIEW D ON C.MEMBER_ID = D.MEMBER_ID
            GROUP BY MEMBER_NAME
            ORDER BY COUNT(REVIEW_ID) DESC

 SELECT C.MEMBER_NAME, COUNT(REVIEW_ID) FROM MEMBER_PROFILE C
                JOIN REST_REVIEW D ON C.MEMBER_ID = D.MEMBER_ID
            GROUP BY MEMBER_NAME
            ORDER BY COUNT(REVIEW_ID) DESC LIMIT 1

LEFT JOIN을 하면 '김서준'이 나오고
(INNER) JOIN을 하면 '김민재'가 나온다.
모두 정답에 해당되니 문제는 없다.

  • 두번째로 안쪽에 있는 쿼리문 해석

    단순히 결과로 나온 회원 이름만 가져오는 것이다.
    아래 코드를 보면 마지막에 E라는 별칭을 설정해주었다.
    써주지 않는다면 "Every derived table must have its own alias"
    이라는 오류가 발생한다.
    위 에러는 서브쿼리에 Alias를 주지 않았을 경우 발생하는 에러이다.
SELECT MEMBER_NAME FROM (
            SELECT C.MEMBER_NAME, COUNT(REVIEW_ID) FROM MEMBER_PROFILE C
                JOIN REST_REVIEW D ON C.MEMBER_ID = D.MEMBER_ID
            GROUP BY MEMBER_NAME
        ORDER BY COUNT(REVIEW_ID) DESC LIMIT 1) E

업로드중..

문법

Alias

해당 테이블마다 별칭을 설정해주면 WHERE 조건문을 작성할 때도 그에 맞는 별칭을 사용해줘야 하며, JOIN한 뒤 ON(JOIN을 하게 만들 조건)을 설정하는 경우 편하게 작성할 수 있다.
앞서 언급한 것과 같이 서브쿼리문 뒤에도 별칭을 작성해줘야 한다!

profile
I believe in myself.

0개의 댓글