맵크나이트의 마라탐방

[Level 4]그룹별 조건에 맞는 식당 목록 출력하기 -실무에 도움될 거 같아서 정리 본문

DataBase/프로그래머스

[Level 4]그룹별 조건에 맞는 식당 목록 출력하기 -실무에 도움될 거 같아서 정리

봉바👾 2023. 9. 18. 21:20

https://school.programmers.co.kr/learn/courses/30/lessons/131124

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

with rv_cnt as (
    SELECT m.MEMBER_ID, count(m.MEMBER_ID) as 1_re_cnt
from MEMBER_PROFILE m 
left join REST_REVIEW r
on m.MEMBER_ID = r.MEMBER_ID
group by 1
), 1st_cnt as(
select MEMBER_ID
from rv_cnt
where 1_re_cnt = (select max(1_re_cnt) from rv_cnt)
)
select m.MEMBER_NAME, r.REVIEW_TEXT,date_format(r.REVIEW_DATE,'%Y-%m-%d') as REVIEW_DATE
from MEMBER_PROFILE m
left join REST_REVIEW r
on r.MEMBER_ID = m.MEMBER_ID
inner join 1st_cnt
on r.MEMBER_ID = 1st_cnt.MEMBER_ID
order by REVIEW_DATE, REVIEW_TEXT

일단 답안

 

MEMBER_PROFILE 

 

REST_REVIEW

 

 

각각 select * 로 했을 때 가져온 데이터,

먼저 re_cnt 테이블을 만들어서 MEMBER_PROFILE  테이블과 REST_REVIEW테이블을 조인후

멤버아이디, 카운트를 셈,

1st_cnt 테이블을 만들어서 re_cnt의 max값이었던 아이디를 구한다

 

이때 내가 기초적인 부분에서 헤멧던 부분,

보면 알 수 있듯이 카운트로 셋을 때 3이 가장 많았고, 아이디가 3건이 있음

max로 구해보니 3만 덜렁...

그럼 max를 where 절에다가 넣어야한다는 소리인데..

그럼 멤버아이디를 select절에 넣고

where절에 max를 하면 되겠군..?

내 목적은 cnt가 3인 아이디 3개를 추리는 것이었는데 어째서인지 re_cnt에 있는 아이디 전부가 나오고말았다

그럼 내 문제는 뭘까

 

where 조건을 조회해봤을때, 3이 나온다

 

where 조건에 3그대로 넣어도 rv_cnt테이블의 아이디가 다 뜨는걸 확인 할 수 있음

where 조건에 1 이상은 다 true이며, 0은 false이다

즉 나의

이 어처구니 없는 식은 where 절에 3 true라고 하는 것이었다

얼척이 없으니...where절에 부등호는 필수이다

1_re_cnt = re_cnt테이블의 1_re_cnt의 max값을 가진 member_id를 가지고 온다

 

그리고 또

max, min 값을 가진 row단이 필요할 시 간단한 식은 

 

select * from rv_cnt where 1_re_cnt = (select max(1_re_cnt) from rv_cnt)

where 절에 넣어서 확인하면 된다고함,

 

그 후엔 간단히  MEMBER_PROFILE  테이블과 REST_REVIEW테이블을 조인후,

1st_cnt를 inner join 하여 on 조건에 member_id를 조건으로 걸면 1st_cnt테이블에 있었던 세 건의 아이디만 추려서 가져올 것이다