https://school.programmers.co.kr/learn/courses/30/lessons/131124
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
코드
SELECT P.MEMBER_NAME, R.REVIEW_TEXT, DATE_FORMAT(R.REVIEW_DATE, '%Y-%m-%d') AS REVIEW_DATE
FROM MEMBER_PROFILE P
INNER JOIN REST_REVIEW 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(*) DESC
LIMIT 1)
ORDER BY 3, 2;
풀이
이 문제를 풀면서 느낀 점은 집계함수를 중첩해서 사용할 수 없다는 것이다.
처음에는 두 테이블을 조인한 후, MEMBER_ID를 기준으로 그룹화를 해서 HAVING절에 COUNT(*) = MAX(COUNT(*))인 것만 추출하려고 하였으나 중첩해서 집계함수를 사용할 수 없기 때문에 오류가 났다.
따라서, 이럴 때는 서브쿼리를 사용해야 한다.
서브쿼리 내에서 그룹화를 통해 COUNT(*)가 가장 큰 MEMBER_ID를 추출한 뒤, 메인쿼리에서 이를 비교해서 조회하면 된다. LIMIT절을 잘 사용해보도록 하자 !
'SQL > Coding Test' 카테고리의 다른 글
[프로그래머스] 특정 기간동안 대여 가능한 자동차들의 대여비용 구하기 (0) | 2024.03.28 |
---|---|
[프로그래머스] 즐겨찾기가 가장 많은 식당 정보 출력하기 (0) | 2024.03.21 |
[프로그래머스] 조건에 맞는 개발자 찾기 (0) | 2024.03.20 |
[프로그래머스] 대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기 (0) | 2024.03.20 |
[프로그래머스] 가격대 별 상품 개수 구하기 (0) | 2024.03.19 |