[JOIN] 그룹별 조건에 맞는 식당 목록 출력하기

쥬쥬스·2023년 11월 17일
0

SQL

목록 보기
57/67
post-thumbnail

문제
MEMBER_PROFILEREST_REVIEW 테이블에서 리뷰를 가장 많이 작성한 회원의 리뷰들을 조회하는 SQL문을 작성해주세요. 회원 이름, 리뷰 텍스트, 리뷰 작성일이 출력되도록 작성해주시고, 결과는 리뷰 작성일을 기준으로 오름차순, 리뷰 작성일이 같다면 리뷰 텍스트를 기준으로 오름차순 정렬해주세요.
REVIEW_DATE의 데이트 포맷이 예시와 동일해야 정답처리 됩니다.

💡 조건

  • 리뷰 가장 많이 작성한 회원
  • 회원 이름, 리뷰 텍스트, 리뷰 작성일 조회
  • 리뷰 작성일, 리뷰 텍스트 기준 오름차순

sql 코드

SELECT member_profile.member_name, review.review_text, 
        date_format(review.review_date,"%Y-%m-%d") review_date
FROM rest_review as review join 
    (SELECT member_id
    FROM rest_review
    GROUP BY member_id
    ORDER BY count(*) DESC LIMIT 1) as id
    on id.member_id = review.member_id
join member_profile ON id.member_id = member_profile.member_id
order by review.review_date, review_text

가장 많은 리뷰를 작성한 회원의 리뷰를 조회하는건데 조회해보면 한사람이 아니다. 리뷰 3개가 가장 많은데 그게 세사람;; 그 중 한명만 조회하면 됨. 음^^? 수정이 필요한거 아닌가?


1. 가장 많은 리뷰 작성한 사람 id 가져오기

FROM rest_review as review join 
    (SELECT member_id
    FROM rest_review
    GROUP BY member_id
    ORDER BY count(*) DESC LIMIT 1) as id
    on id.member_id = review.member_id
  1. member_id로 묶어주고 리뷰 개수 세기
  2. 내림차순 정렬해서 가장 위에 있는 member_id 가져오기
  3. 리뷰 내용을 가져올거니까 같은 테이블과 join 해준다

2. 근데 회원 이름도 가져와줄래?

join member_profile ON id.member_id = member_profile.member_id

from절에서 리뷰 테이블에서 가져온 id와 같은 id의 멤버 프로필도 가져온다. 덕분에 join 두번하는 법 배움

3. 이제 조회해보자

SELECT member_profile.member_name, review.review_text, 
        date_format(review.review_date,"%Y-%m-%d") review_date

어떤 테이블에서 가져올건지 명시해서 조회해주고, 날짜 포맷도 맞춰준다.

4. 조회는 작성일, 텍스트 기준으로

order by review.review_date, review_text
profile
느려도... 꾸준히.....🐌

0개의 댓글