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

강동준·2023년 2월 21일
1

코딩테스트

목록 보기
6/6

문제

MEMBER_PROFILE와 REST_REVIEW 테이블에서 리뷰를 가장 많이 작성한 회원의 리뷰들을 조회하는 SQL문을 작성해주세요. 회원 이름, 리뷰 텍스트, 리뷰 작성일이 출력되도록 작성해주시고, 결과는 리뷰 작성일을 기준으로 오름차순, 리뷰 작성일이 같다면 리뷰 텍스트를 기준으로 오름차순 정렬해주세요.

테이블 설명

MEMBER_PROFILE

Column nameTypeNullableDesc
MEMBER_IDVARCHAR(100)FALSE회원 ID
MEMBER_NAMEVARCHAR(50)FALSE회원 이름
TLNOVARCHAR(50)TRUE회원 연락처
GENDERVARCHAR(1)TRUE성별
DATE_OF_BIRTHDATETRUE생년월일

REST_REVIEW

Column nameTypeNullableDesc
REVIEW_IDVARCHAR(10)FALSE리뷰 ID
REST_IDVARCHAR(10)TRUE식당 ID
MEMBER_IDVARCHAR(100)TRUE회원 ID
REVIEW_SCORENUMBERTRUE점수
REVIEW_TEXTVARCHAR(1000)TRUE리뷰 텍스트
REVIEW_DATEDATETRUE리뷰 작성일

주의사항

  • REVIEW_DATE의 데이트 포맷이 예시와 동일해야 정답처리 됩니다.
    예시 : 2022-02-12

내가 제출한 SQL문

WITH MOST_MAX_CNT AS (
        SELECT
            MAX(A.CNT) AS 'MAX_CNT'
        FROM (SELECT
            R.MEMBER_ID
            ,COUNT(R.MEMBER_ID) AS 'CNT'
        FROM REST_REVIEW R
        GROUP BY R.MEMBER_ID) A
    )
    , MOST_REVIEW AS (
        SELECT
            R.MEMBER_ID
            ,COUNT(R.MEMBER_ID) AS 'CNT'
        FROM REST_REVIEW R
        GROUP BY R.MEMBER_ID
        ORDER BY CNT DESC
    )
    SELECT
        MP.MEMBER_NAME
        ,RR.REVIEW_TEXT
        ,DATE_FORMAT(RR.REVIEW_DATE, '%Y-%m-%d') AS 'REVIEW_DATE'
    FROM MOST_REVIEW M
    JOIN MOST_MAX_CNT MC
        ON MC.MAX_CNT = M.CNT
    INNER JOIN MEMBER_PROFILE MP
        ON M.MEMBER_ID = MP.MEMBER_ID
    INNER JOIN REST_REVIEW RR
        ON M.MEMBER_ID = RR.MEMBER_ID
    ORDER BY REVIEW_DATE ASC, RR.REVIEW_TEXT ASC;

다른 사람 풀이(RANK 함수 사용)

	SELECT 
        MEMBER_NAME
        ,REVIEW_TEXT
        ,date_format(REVIEW_DATE,"%Y-%m-%d") as REVIEW_DATE
    FROM (
        SELECT 
            MEMBER_ID
            ,COUNT(MEMBER_ID)
            ,dense_rank() over(ORDER BY COUNT(MEMBER_ID) DESC) as ran
        FROM REST_REVIEW
        GROUP BY MEMBER_ID
        ORDER BY COUNT(MEMBER_ID) DESC
    ) A NATURAL JOIN MEMBER_PROFILE JOIN REST_REVIEW USING (MEMBER_ID)
    WHERE A.ran =1
    ORDER BY REVIEW_DATE,REVIEW_TEXT;

RANK 함수 공부한 사이트

RANK / DENSE_RANK / ROW_NUMBER 차이점

profile
성장을 멈추지 않는 백엔드개발자입니다.

0개의 댓글