코딩테스트/프로그래머스

[MYSQL] 그룹별 조건에 맞는 식당 목록 출력하기(IN, JOIN, DATE_FORMAT)

clamp 2022. 10. 13. 13:55

 REST_INFO테이블과 식당의 리뷰 정보를 담은 REST_REVIEW 테이블입니다. 

 

MEMBER_PROFILE 테이블은 다음과 같으며 

MEMBER_ID, 회원 ID

MEMBER_NAME,  회원 이름

TLNO,  회원 연락처

GENDER,  성별,

DATE_OF_BIRTH 생년월일

 

 

REST_REVIEW 테이블은 다음과 같으며 

REVIEW_ID, 리뷰 ID

REST_ID, 식당 ID

MEMBER_ID, 회원 ID

REVIEW_SCORE, 점수

REVIEW_TEXT, 리뷰 텍스트

REVIEW_DATE, 리뷰 작성일

 

MEMBER_PROFILE와 REST_REVIEW테이블에서 리뷰를 가장 많이 작성한 회원의 리뷰들을 조회하는 SQL문을 작성해주세요.

회원이름, 리뷰텍스트, 리뷰작성일이 출력되도록 작성해주시고, 결과는 리뷰작성일을 기준으로 오름차순 정렬해주세요.

SELECT B.MEMBER_NAME, C.REVIEW_TEXT, DATE_FORMAT(C.REVIEW_DATE, '%Y-%m-%d') AS REVIEW_DATE
FROM MEMBER_PROFILE B
INNER JOIN REST_REVIEW C
ON B.MEMBER_ID = C.MEMBER_ID
WHERE C.MEMBER_ID IN(---------------------------------
	SELECT MEMBER_ID
    FROM REST_REVIEW						최대 리뷰 횟수의 작성자 ID를 구함
    GROUP BY MEMBER_ID
    HAVING COUNT(MEMBER_ID) = (            ----
    	SELECT COUNT(MEMBER_ID) CNT
        FROM REST_REVIEW		최대 리뷰 횟수를 구함
        GROUP BY MEMBER_ID) A
        )                             	   ----
	)------------------------------------------------
ORDER BY REVIEW_DATE

* inner join

조인하는 테이블의 ON절의 조건이 일치하는 결과만 출력. join조건에서 동일한 값이 있는 행만을 반환한다.

A와 B의 교집합(서로 중복되는 값)을 보여준다,

SELECT A.xxx, B.yyy
FROM TABLE A INNER JOIN TABLE B 
ON A.key = B.key
WHERE A.key = '111'

함축구문

SELECT A.xxx, B.yyy
FROM TABLE A, TABLE B
WHERE A.key = B.key and A.key = '111'

from절에 콤마만 쓰면 inner join으로 치부된다.


DATE_FROMAT

DATE_FORMAT(날짜, 형식): 날짜를 지정한 형식으로 출력

SQL

SELECT DATE_FORMAT(NOW(), '%Y-%m-%d') AS DATE
FROM DUAL