반응형
테이블 정보
1. MEMBER_PROFILE
Column name | Type | Nullable |
MEMBER_ID | VARCHAR(100) | FALSE |
MEMBER_NAME | VARCHAR(50) | FALSE |
TLNO | VARCHAR(50) | TRUE |
GENDER | VARCHAR(1) | TRUE |
DATE_OF_BIRTH | DATE | TRUE |
2. REST_REVIEW
Column name | Type | Nullable |
REVIEW_ID | VARCHAR(10) | FALSE |
REST_ID | VARCHAR(10) | TRUE |
MEMBER_ID | VARCHAR(100) | TRUE |
REVIEW_SCORE | NUMBER | TRUE |
REVIEW_TEXT | VARCHAR(1000) | TRUE |
REVIEW_DATE | DATE | TRUE |
예시 테이블
1. MEMBER_PROFILE
MEMBER_ID | MEMBER_NAME | TLNO | GENDER | DATE_OF_BIRTH |
jiho92@naver.com | 이지호 | 1076432111 | W | 1992-02-12 |
jiyoon22@hotmail.com | 김지윤 | 1032324117 | W | 1992-02-22 |
jihoon93@hanmail.net | 김지훈 | 1023258688 | M | 1993-02-23 |
seoyeons@naver.com | 박서연 | 1076482209 | W | 1993-03-16 |
yelin1130@gmail.com | 조예린 | 1017626711 | W | 1990-11-30 |
2. REST_REVIEW
REVIEW_ID | REST_ID | MEMBER_ID | REVIEW_SCORE | REVIEW_TEXT | REVIEW_DATE |
R000000065 | 28 | soobin97@naver.com | 5 | 부찌 국물에서 샤브샤브 맛이나고 깔끔 | 2022-04-12 |
R000000066 | 39 | yelin1130@gmail.com | 5 | 김치찌개 최곱니다. | 2022-02-12 |
R000000067 | 28 | yelin1130@gmail.com | 5 | 햄이 많아서 좋아요 | 2022-02-22 |
R000000068 | 35 | ksyi0316@gmail.com | 5 | 숙성회가 끝내줍니다. | 2022-02-15 |
R000000069 | 35 | yoonsy95@naver.com | 4 | 비린내가 전혀없어요. | 2022-04-16 |
출력 기대값
MEMBER_NAME | REVIEW_TEXT | REVIEW_DATE |
조예린 | 김치찌개 최곱니다. | 2022-02-12 |
조예린 | 햄이 많아서 좋아요 | 2022-02-22 |
문제
MEMBER_PROFILE와 REST_REVIEW 테이블에서 리뷰를 가장 많이 작성한 회원의 리뷰들을 조회하는 SQL문을 작성해주세요. 회원 이름, 리뷰 텍스트, 리뷰 작성일이 출력되도록 작성해주시고, 결과는 리뷰 작성일을 기준으로 오름차순, 리뷰 작성일이 같다면 리뷰 텍스트를 기준으로 오름차순 정렬해주세요.
아이디어
- 리뷰를 가장 많이 작성한 회원을 알아야 한다, REST_REVIEW 테이블을 GROUP BY로 서브쿼리를 생성한다.
- 가장 많이 작성한 회원 1명만 알면 되므로 정렬과 FETCH FIRST 1 ROW ONLY를 통해 상위 1명만 구해준다.
- 리뷰 텍스트, 리뷰 작성일을 알아야 하므로 REST_REVIEW 테이블을 다시 한번 참조한다.
- MEMBER_PROFILE과 REST_REVIEW과 서브쿼리의 MEMBER_ID가 같은 사람만 참조한다.
- 그 사람의 이름과 작성한 리뷰 및 리뷰 작성일을 모두 출력해 준다.
- 정렬은 3, 2순으로 오름차순 정렬해 주면 된다.
정답
-- 코드를 입력하세요
SELECT A.MEMBER_NAME, C.REVIEW_TEXT, TO_CHAR(C.REVIEW_DATE, 'YYYY-MM-DD') AS REVIEW_DATE
FROM MEMBER_PROFILE A
INNER JOIN (
SELECT MEMBER_ID, COUNT(*)
FROM REST_REVIEW
WHERE MEMBER_ID IS NOT NULL
GROUP BY MEMBER_ID
ORDER BY 2 DESC
FETCH FIRST 1 ROW ONLY
) B
ON A.MEMBER_ID = B.MEMBER_ID,
REST_REVIEW C
WHERE A.MEMBER_ID = B.MEMBER_ID
AND B.MEMBER_ID = C.MEMBER_ID
ORDER BY 3, 2
참고사항
리뷰 작성일을 'YYYY-MM-DD' 형태로, 별칭은 REVIEW_DATE로 출력해 주어야 한다.
728x90
반응형
'알고리즘 공부 > SQL' 카테고리의 다른 글
[L4] 프로그래머스 MYSQL FrontEnd 개발자 찾기 (0) | 2024.10.18 |
---|---|
[L3] 프로그래머스 ORACLE 카테고리 별 도서 판매량 집계하기 (1) | 2024.10.18 |
[L4] 프로그래머스 ORACLE 주문량이 많은 아이스크림들 조회하기 (1) | 2024.10.18 |
[L4] 프로그래머스 ORACLE 5월 식품들의 총매출 조회하기 (0) | 2024.10.18 |
[L3] 프로그래머스 ORACLE, MYSQL 오랜 기간 보호한 동물(1) (1) | 2024.10.18 |