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