728x90
반응형
문제
https://school.programmers.co.kr/learn/courses/30/lessons/131124
정답
SELECT
MEMBER_NAME,
REVIEW_TEXT,
TO_CHAR(REVIEW_DATE, 'YYYY-MM-DD') AS REVIEW_DATE
FROM (
SELECT
A.MEMBER_NAME,
B.REVIEW_TEXT,
B.REVIEW_DATE,
COUNT(*) OVER(PARTITION BY B.MEMBER_ID ) AS COUNT
FROM MEMBER_PROFILE A, REST_REVIEW B
WHERE A.MEMBER_ID = B.MEMBER_ID)
WHERE COUNT = (SELECT MAX(COUNT(*))
FROM REST_REVIEW
GROUP BY MEMBER_ID)
ORDER BY MEMBER_NAME, REVIEW_DATE, REVIEW_TEXT;
풀이
1. 조건을 파악한다.
1-1. REST_REVIEW 테이블에서 리뷰를 가장 많이 작성한 회원을 찾을 것
1-2. '1-1'의 조건을 기준으로 '회원이름, '리뷰텍스트', '리뷰 작성일' 을 조회할 것
1-3. 리뷰작성일 오름차순, 리뷰텍스트 오름차순으로 정렬할 것
2. 풀이
2-1.
SELECT
A.MEMBER_NAME,
B.REVIEW_TEXT,
B.REVIEW_DATE,
COUNT(*) OVER(PARTITION BY B.MEMBER_ID ) AS COUNT
FROM MEMBER_PROFILE A, REST_REVIEW B
WHERE A.MEMBER_ID = B.MEMBER_ID
리뷰를 가장 많이 작성한 회원을 찾을 때는 REST_REVIEW테이블만 있으면 찾을 수 있지만, 최종적으로 조회할 때 '회원이름'을 조회해야 하기 때문에 REST_REVIEW테이블과 MEMBER_PROFILE테이블을 조인해서 조회한다.
위의 SQL문에서 WHERE절은 MEMBER_PROFILE과 REST_REVIEW테이블의 조인 조건이며
COUNT(*)의 OVER절을 통해 MEMBER_ID별로 묶어 COUNT(*)를 주었다.
2-2.
SELECT
MEMBER_NAME,
REVIEW_TEXT,
TO_CHAR(REVIEW_DATE, 'YYYY-MM-DD') AS REVIEW_DATE
FROM (
SELECT
A.MEMBER_NAME,
B.REVIEW_TEXT,
B.REVIEW_DATE,
COUNT(*) OVER(PARTITION BY B.MEMBER_ID ) AS COUNT
FROM MEMBER_PROFILE A, REST_REVIEW B
WHERE A.MEMBER_ID = B.MEMBER_ID)
WHERE COUNT = (SELECT MAX(COUNT(*))
FROM REST_REVIEW
GROUP BY MEMBER_ID)
ORDER BY MEMBER_NAME, REVIEW_DATE, REVIEW_TEXT;
그리고 위의 SQL과 같이 '2-1'에서 작성한 SQL을 한번 더 감싸서 WHERE절에 COUNT를 통해 최고값을 찾아 필터한 후 SELECT에서 조회하고자 하는 컬럼들을 작성한다.
2-3. 마지막으로 ORDER BY 문을 통해 문제에서 낸 조건을 충족한다.
728x90
반응형
'프로그래머스 > SQL문제' 카테고리의 다른 글
[SQL문제] 상품을 구매한 회원 비율 구하기 (0) | 2022.11.12 |
---|