츄르사려고 코딩하는집사입니다.
1. [프로그래머스/SQL] 그룹별 조건에 맞는 식당 목록 출력하기 오라클(Oracle)
2. 문제 출처
https://school.programmers.co.kr/learn/courses/30/lessons/131124
3. 문제
다음은 식당의 정보를 담은 REST_INFO테이블과 식당의 리뷰 정보를 담은 REST_REVIEW 테이블입니다. MEMBER_PROFILE 테이블은 다음과 같으며 MEMBER_ID, MEMBER_NAME, TLNO, GENDER, DATE_OF_BIRTH는 회원 ID, 회원 이름, 회원 연락처, 성별, 생년월일을 의미합니다.
Column nameTypeNullable
MEMBER_ID | VARCHAR(100) | FALSE |
MEMBER_NAME | VARCHAR(50) | FALSE |
TLNO | VARCHAR(50) | TRUE |
GENDER | VARCHAR(1) | TRUE |
DATE_OF_BIRTH | DATE | TRUE |
REST_REVIEW 테이블은 다음과 같으며 REVIEW_ID, REST_ID, MEMBER_ID, REVIEW_SCORE, REVIEW_TEXT,REVIEW_DATE는 각각 리뷰 ID, 식당 ID, 회원 ID, 점수, 리뷰 텍스트, 리뷰 작성일을 의미합니다.
Column nameTypeNullable
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 |
문제
MEMBER_PROFILE와 REST_REVIEW 테이블에서 리뷰를 가장 많이 작성한 회원의 리뷰들을 조회하는 SQL문을 작성해주세요. 회원 이름, 리뷰 텍스트, 리뷰 작성일이 출력되도록 작성해주시고, 결과는 리뷰 작성일을 기준으로 오름차순 정렬해주세요.
예시
MEMBER_PROFILE 테이블이 다음과 같고
MEMBER_IDMEMBER_NAMETLNOGENDERDATE_OF_BIRTH
jiho92@naver.com | 이지호 | 01076432111 | W | 1992-02-12 |
jiyoon22@hotmail.com | 김지윤 | 01032324117 | W | 1992-02-22 |
jihoon93@hanmail.net | 김지훈 | 01023258688 | M | 1993-02-23 |
seoyeons@naver.com | 박서연 | 01076482209 | W | 1993-03-16 |
yelin1130@gmail.com | 조예린 | 01017626711 | W | 1990-11-30 |
REST_REVIEW 테이블이 다음과 같을 때
REVIEW_IDREST_IDMEMBER_IDREVIEW_SCOREREVIEW_TEXTREVIEW_DATE
R000000065 | 00028 | soobin97@naver.com | 5 | 부찌 국물에서 샤브샤브 맛이나고 깔끔 | 2022-04-12 |
R000000066 | 00039 | yelin1130@gmail.com | 5 | 김치찌개 최곱니다. | 2022-02-12 |
R000000067 | 00028 | yelin1130@gmail.com | 5 | 햄이 많아서 좋아요 | 2022-02-22 |
R000000068 | 00035 | ksyi0316@gmail.com | 5 | 숙성회가 끝내줍니다. | 2022-02-15 |
R000000069 | 00035 | yoonsy95@naver.com | 4 | 비린내가 전혀없어요. | 2022-04-16 |
SQL을 실행하면 다음과 같이 출력되어야 합니다.
MEMBER_NAMEREVIEW_TEXTREVIEW_DATE
조예린 | 김치찌개 최곱니다. | 2022-02-12 |
조예린 | 햄이 많아서 좋아요 | 2022-02-22 |
4. 풀이
- MEMBER_PROFILE(MP) 테이블과 REST_REVIEW(RR) 테이블을 MEMBER_ID 기준으로 INNER JOIN을 한다. 우리는 MEMBER_ID를 알아야 MEMBER_NAME을 알기 때문에, MEMBER_ID를 RR 테이블에서 찾아야 한다. 찾아야 하는 기준은 GROUP BY를 했을 때, 가장 많은 값을 가지고 있는 MEMBER_ID를 뽑아내야 하기 때문에, GROUP BY ~ HAVING 절을 통해 뽑아내서 출력하면 된다.
5. 소스 코드
SELECT MP.MEMBER_NAME AS MEMBER_NAME
, RR.REVIEW_TEXT AS REVIEW_TEXT
, TO_CHAR(RR.REVIEW_DATE, 'YYYY-MM-DD') AS REVIEW_DATE
FROM MEMBER_PROFILE MP
INNER JOIN REST_REVIEW RR ON MP.MEMBER_ID = RR.MEMBER_ID
WHERE RR.MEMBER_ID IN (
SELECT MEMBER_ID
FROM REST_REVIEW
GROUP BY MEMBER_ID
HAVING COUNT(*) = ( SELECT MAX(COUNT(*))
FROM REST_REVIEW
GROUP BY MEMBER_ID
)
)
ORDER BY RR.REVIEW_DATE
'알고리즘 > 프로그래머스SQL' 카테고리의 다른 글
[프로그래머스/SQL] 식품분류별 가장 비싼 식품의 정보 조회하기 오라클(Oracle) (0) | 2022.10.15 |
---|---|
[프로그래머스/SQL] 조건에 맞는 회원수 구하기 오라클(Oracle) (0) | 2022.10.14 |
[프로그래머스/SQL] 5월 식품들의 총매출 조회하기 오라클(Oracle) (0) | 2022.10.14 |
[프로그래머스/SQL] 카테고리 별 상품 개수 구하기 오라클(Oracle) (0) | 2022.10.14 |
[프로그래머스/SQL] 상품 별 오프라인 매출 구하기 오라클(Oracle) (0) | 2022.10.14 |
[프로그래머스/SQL] 즐겨찾기가 가장 많은 식당 정보 출력하기 오라클(Oracle) (2) | 2022.10.14 |
[프로그래머스/SQL] 가장 비싼 상품 구하기 오라클(Oracle) (0) | 2022.10.14 |
[프로그래머스/SQL] 년, 월, 성별 별 상품 구매 회원 수 구하기 오라클(Oracle) (0) | 2022.10.14 |
최근댓글