MEMBER_PROFILE와 REST_REVIEW 테이블에서 리뷰를 가장 많이 작성한 회원의 리뷰들을 조회하는 SQL문을 작성해주세요. 회원 이름, 리뷰 텍스트, 리뷰 작성일이 출력되도록 작성해주시고, 결과는 리뷰 작성일을 기준으로 오름차순, 리뷰 작성일이 같다면 리뷰 텍스트를 기준으로 오름차순 정렬해주세요.
답
SELECT MEMBER_ID, COUNT(REVIEW_ID)
, (RANK() OVER (PARTITION BY COUNT(REVIEW_ID) ORDER BY COUNT(REVIEW_ID) DESC)) AS RANK
FROM REST_REVIEW
GROUP BY MEMBER_ID
ORDER BY COUNT(REVIEW_ID) DESC.....
에러나는 이유: 집계함수와 윈도우함수는 같이쓸수없음!!!
*집계함수와 윈도우함수는 같이 쓸수없음
그래서 다른걸 이렇게 저렇게 시도하니까 가독성도 최악이고 어떻게 해야할지 모르겠음;;
그래서 찾아보았다 가독성은 어떻게 높이나...!
여러 CTE 쓸때는 요렇게 쓰면 된다👇

좋아 너무 깔끔해!
이렇게 계속 쓰고 계속 쓰다가 CTE를 A4용지 9장 넘어가게 쓰는 경우도 있다고 하는거구나 ㅋㅋㅋㅋㅋ
이해 완료🫡
그럼 요런 방식으로 다시 써보자
WITH REVIEW_COUNT AS (
SELECT
MEMBER_ID,
COUNT(REVIEW_ID) AS REV_COUNT
FROM REST_REVIEW
GROUP BY MEMBER_ID
),
TOP_REVIEW_COUNT AS (
SELECT MEMBER_ID, REV_COUNT, RANK() OVER (ORDER BY REV_COUNT DESC) AS RANKING
FROM REVIEW_COUNT
),
TOP_REVIEWER AS(
SELECT MEMBER_ID
FROM TOP_REVIEW_COUNT
WHERE RANKING = 1
)
SELECT M.MEMBER_NAME, R.REVIEW_TEXT, DATE_FORMAT(R.REVIEW_DATE, '%Y-%m-%d') AS REVIEW_DATE
FROM TOP_REVIEWER T
JOIN MEMBER_PROFILE M
ON T.MEMBER_ID = M.MEMBER_ID
JOIN REST_REVIEW R
ON T.MEMBER_ID = R.MEMBER_ID
ORDER BY R.REVIEW_DATE ASC, R.REVIEW_TEXT ASC;
아직 이 흐름에 적응해야할듯!
리뷰를 가장 많이 쓴 사람 뽑기 를 하려면
리뷰개수 취합 > 리뷰개수 순서대로 랭킹 매기고 > 랭킹 = 1 뽑고
그렇게 가장 리뷰많이 쓴 아이디를 뽑았으면, 그 아이디에다가 다른 정보를 붙여서 가장 리뷰많이쓴사람들 데이터 뽑아내기!
아직도 ㅋㅋ 집계함수랑 순위함수 같이 쓰고싶어하는 내 손가락😅 왜 안되는데!!!ㅠㅠㅠ
그래도 이렇게 가독성 좋게 쓰니 마음이 편함

체한게 내려간 느낌이다ㅋㅋㅋ
그럼 다음 문제로 ㄱㄱ👟👟
'문제풀이 > SQL 문제풀이' 카테고리의 다른 글
| SQL/프로그래머스 - 특정 조건을 만족하는 물고기별 수와 최대 길이 구하기 (0) | 2025.11.23 |
|---|---|
| 프로그래머스/SQL - FrontEnd 개발자 찾기(비트 연산자 조인) (0) | 2025.10.18 |
| 프로그래머스 / SQL - 없어진 기록 찾기 (0) | 2025.10.12 |
| 프로그래머스/SQL - 물고기 종류 별 대어 찾기 (0) | 2025.10.10 |
| 프로그래머스/SQL - 연도별 대장균 크기의 편차 구하기 (0) | 2025.10.10 |