TIL-sparta

프로그래머스) 그룹별 조건에 맞는 식당 출력하기 풀이 (MySQL)

Megadr0ne 2024. 6. 23. 20:37

 

학습 키워드: MySQL, Aggregation, ORDER BY

 

131124 - 그룹별 조건에 맞는 식당 출력하기

1) 문제 설명 요약 (원문은 링크 참고):

 

프로그래머스

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

programmers.co.kr

 요약: 고객 정보를 담은 테이블 MEMBER_PROFILE과 식당 리뷰 정보를 담은 테이블 REST_REVIEW에서 리뷰를 가장 많이 작성한 고객의 이름과 고객이 작성했던 리뷰들의 리뷰 내용, 리뷰 날짜를 함께 출력하는 문제다.

 

2) 풀이 과정:

 가장 많은 리뷰를 작성한 멤버를 알아내는 쿼리를 우선적으로 작성한 뒤, 다시 바깥의 쿼리에서 일치되는 멤버 ID를 가진 리뷰들만 출력해내면 된다.

 

3) 정답 쿼리:

SELECT mp.MEMBER_NAME,
    rr.REVIEW_TEXT,
    DATE_FORMAT(rr.REVIEW_DATE, '%Y-%m-%d') AS REVIEW_DATE
FROM MEMBER_PROFILE mp
JOIN REST_REVIEW rr
ON mp.MEMBER_ID=rr.MEMBER_ID
WHERE (mp.MEMBER_ID) IN (
    SELECT MEMBER_ID
    FROM REST_REVIEW
    GROUP BY MEMBER_ID
    ORDER BY COUNT(*) DESC
    LIMIT 1
)
ORDER BY 3, 2

 

 

4) 기타 사항:

...

WHERE (mp.MEMBER_ID) IN (
    SELECT MEMBER_ID
    FROM REST_REVIEW
    GROUP BY MEMBER_ID
    ORDER BY COUNT(*) DESC
    LIMIT 1
)

...

# SQL 실행 중 오류가 발생하였습니다.
# This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'

  부트캠프를 진행하면서 최근에 코드카타 SQL 문제 몇 개를 푸는동안 지속적으로 어려움을 겪던 부분이 있었는데, 바로 서브 쿼리에서의 LIMIT의 사용이었다. 위와 같은 형태로 서브쿼리를 짜고 싶었는데 항상 에러가 출력되어서 서브 쿼리에서는 LIMIT을 쓸 수 없는 줄 알았다. 그런데 에러를 자세히 읽어보니 IN, ALL, ANY, SOME 키워드에서만 사용이 불가능한 것을 알게 되어서 앞으로 자주 사용하게 될 것 같다.

 

 

728x90