알고리즘 공부/SQL

[L4] 프로그래머스 ORACLE 그룹별 조건에 맞는 식당 목록 출력하기

마달랭 2024. 10. 18. 21:57
반응형

테이블 정보

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문을 작성해주세요. 회원 이름, 리뷰 텍스트, 리뷰 작성일이 출력되도록 작성해주시고, 결과는 리뷰 작성일을 기준으로 오름차순, 리뷰 작성일이 같다면 리뷰 텍스트를 기준으로 오름차순 정렬해주세요.

 

 

아이디어

  1. 리뷰를 가장 많이 작성한 회원을 알아야 한다, REST_REVIEW 테이블을 GROUP BY로 서브쿼리를 생성한다.
  2. 가장 많이 작성한 회원 1명만 알면 되므로 정렬과 FETCH FIRST 1 ROW ONLY를 통해 상위 1명만 구해준다.
  3. 리뷰 텍스트, 리뷰 작성일을 알아야 하므로 REST_REVIEW 테이블을 다시 한번 참조한다.
  4. MEMBER_PROFILE과 REST_REVIEW과 서브쿼리의 MEMBER_ID가 같은 사람만 참조한다.
  5. 그 사람의 이름과 작성한 리뷰 및 리뷰 작성일을 모두 출력해 준다.
  6. 정렬은 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
반응형