728x90
반응형
https://school.programmers.co.kr/learn/courses/30/lessons/131124
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
문제 유형
- SQL
- JOIN
문제 난이도
- LEV4
문제 분석
두 개의 테이블이 주어진다.
MEMBER_PROFILE: 고객의 정보
REST_REVIEW: 식당의 리뷰 정보
구하고자 하는 SQL
- 리뷰를 가장 많이 작성한 회원들의 리뷰들을 조회
- 회원 이름, 리뷰 텍스트, 리뷰 작성일
- 리뷰 작성일을 기준으로 오름차순, 리뷰 텍스트 기준으놀 오름차순
두 개의 CTE(Common Table Expression)를 활용해서 가장 많은 리뷰의 MEMER_ID를 구하고, 해당하는 회원의 이름과 리뷰 내용, 작성일을 작성한다.
DATE_FORMAT(변환하고자 하는 날짜, "날짜 형식")으로 형식에 맞게 출력하도록 한다.
LIMIT 1을 사용하면 안되는 이유
만약, 리뷰의 개수가 동일한 회원이 여러 명인데, 1명만 출력하게 되므로 단순하게 LIMIT을 사용하면 안된다.
전체 코드
WITH REVIEW_CNT AS (
SELECT MEMBER_ID, REVIEW_TEXT, REVIEW_DATE, COUNT(*) AS CNT
FROM REST_REVIEW
GROUP BY MEMBER_ID
),
MAX_REVIEW AS (
SELECT MEMBER_ID
FROM REVIEW_CNT
WHERE CNT = (SELECT MAX(CNT) FROM REVIEW_CNT)
)
SELECT A.MEMBER_NAME, B.REVIEW_TEXT, DATE_FORMAT(B.REVIEW_DATE, "%Y-%m-%d") AS REVIEW_DATE
FROM MEMBER_PROFILE A
JOIN REST_REVIEW B ON A.MEMBER_ID = B.MEMBER_ID
JOIN MAX_REVIEW C ON B.MEMBER_ID = C.MEMBER_ID
ORDER BY REVIEW_DATE, B.REVIEW_TEXT
728x90
반응형
'알고리즘 > SQL' 카테고리의 다른 글
[SQL] 자동차 대여 기록 별 금액 구하기 (1) | 2025.06.11 |
---|---|
[SQL] 5월 식품들의 총매출 조회하기 (0) | 2025.06.10 |
[SQL] 노선별 평균 역 사이 거리 조회하기 (1) | 2025.06.09 |
[SQL] 조건에 맞는 사원 정보 조회하기 (0) | 2025.05.16 |
[SQL] 입양 시각 구하기 (2) (0) | 2025.05.09 |