반응형
문제
다음은 식당의 정보를 담은 REST_INFO테이블과 식당의 리뷰 정보를 담은 REST_REVIEW 테이블입니다. MEMBER_PROFILE 테이블은 다음과 같으며 MEMBER_ID, MEMBER_NAME, TLNO, GENDER, DATE_OF_BIRTH는 회원 ID, 회원 이름, 회원 연락처, 성별, 생년월일을 의미합니다.
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 |
REST_REVIEW 테이블은 다음과 같으며 REVIEW_ID, REST_ID, MEMBER_ID, REVIEW_SCORE, REVIEW_TEXT, REVIEW_DATE는 각각 리뷰 ID, 식당 ID, 회원 ID, 점수, 리뷰 텍스트, 리뷰 작성일을 의미합니다.
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 |
MEMBER_PROFILE와 REST_REVIEW 테이블에서 리뷰를 가장 많이 작성한 회원의 리뷰들을 조회하는 SQL문을 작성해주세요. 회원 이름, 리뷰 텍스트, 리뷰 작성일이 출력되도록 작성해 주시고, 결과는 리뷰 작성일을 기준으로 오름차순, 리뷰 작성일이 같다면 리뷰 텍스트를 기준으로 오름차순 정렬해 주세요.
개념 공부하기
GROUP BY, COUNT | GROUP 그룹화 후 COUNT 세기 |
JOIN, INNER JOIN | JOIN : 두 테이블 합치기 |
풀이
문제를 읽으면서 조건들을 분리하며 이해해 본다. 리뷰를 가장 많이 작성한 회원, 그 회원의 전체 리뷰를 가져오고 이름, 텍스트, 작성일을 출력하면 된다.
- 우선 리뷰를 가장 많이 작성한 회원 ID 구하기 위해 MEMBER_ID로 그룹화 한 뒤 COUNT 집계를 해준다.
- COUNT 기준 내림차순 정렬 된 행들 중 LIMIT 1 사용해 가장 맨 위 행을 골라온다. (빨간 박스)
- 골라온 행에서 MEMBER_ID가 가장 리뷰를 많이 작성한 ID이고 그 해당 아이디로 작성된 리뷰들만 분리해준다. (노란 박스)
- 리뷰 테이블과 회원 정보 테이블을 MEMBER_ID로 JOIN을 통해 합쳐준다 (보라 박스)
- 원하는 이름 정보, 텍스트, 날짜를 출력해준다.
- 날짜는 문제에서 원하는 날짜 형식을 맞추기 위해 DATE_FORMAT()을 사용해준다.
SELECT M.MEMBER_NAME, R.REVIEW_TEXT, DATE_FORMAT(R.REVIEW_DATE, "%Y-%m-%d")
FROM MEMBER_PROFILE M
JOIN (
SELECT REVIEW_TEXT, REVIEW_DATE, MEMBER_ID
FROM REST_REVIEW
WHERE MEMBER_ID = (
SELECT MEMBER_ID
FROM REST_REVIEW
GROUP BY MEMBER_ID
ORDER BY COUNT(*) DESC
LIMIT 1)
) R
ON R.MEMBER_ID = M.MEMBER_ID
ORDER BY R.REVIEW_DATE, R.REVIEW_TEXT
;
출처 : https://school.programmers.co.kr/learn/courses/30/lessons/131124
반응형
'PS > SQL' 카테고리의 다른 글
프로그래머스 3월에 태어난 여성 회원 목록 출력하기 SQL(MySQL) (0) | 2023.05.10 |
---|---|
프로그래머스 즐겨찾기가 가장 많은 식당 정보 출력하기 SQL(MySQL) (1) | 2023.05.09 |
프로그래머스 년, 월, 성별 별 상품 구매 회원 수 구하기 SQL(MySQL) (0) | 2023.05.07 |
프로그래머스 상품 별 오프라인 매출 구하기 SQL(MySQL) (0) | 2023.05.06 |
프로그래머스 조건에 맞는 사용자와 총 거래 금액 조회하기 SQL(MySQL) (1) | 2023.05.06 |