문제
https://school.programmers.co.kr/learn/courses/30/lessons/131124
1차 시도
// 1. 멤버와 리뷰 테이블을 id 기준으로 조인 하는데 이때, 유형별로 그룹바이로 묶어 리뷰를 카운팅하고, 최대 리뷰쓴 사람 1명의 id만 추출
// 2. 이후 REST_REVIEW 테이블에서 추출된 id값과 같은 데이터를 조회
// 3. name,text,date조회 후 정렬
select MEMBER_NAME, REVIEW_TEXT, DATE_FORMAT(REVIEW_DATE, "%Y-%m-%d") AS REVIEW_DATE
from
REST_REVIEW ,
(select P.MEMBER_NAME, R.MEMBER_ID
from MEMBER_PROFILE P join REST_REVIEW R on P.MEMBER_ID = R.MEMBER_ID
group by MEMBER_NAME
order by (count(R.MEMBER_ID)) desc limit 1) T
where T.MEMBER_ID = REST_REVIEW.MEMBER_ID
order by REVIEW_DATE, REVIEW_TEXT
[피드백]
- from 에서 인라인 뷰로 새로운 테이블 만들어서 가공후 select에선 결과값만 빼내려고 했는데
최대 리뷰 쓴 사람을 알아낸 후 join해야 하므로 where문에서 서브쿼리를 쓰는게 나았다.
- 불필요한 조인 : 최대 리뷰 쓴 사람의 id를 알아내기 위해 두 테이블을 조인 했는데 그럴 필요 없이 REST_REVIEW 테이블만 가지고 할 수 있다.
2차 시도
[개선]
- where절에서 서브쿼리, 최대 리뷰 쓴 사람id값 추출
- 최대 리뷰 쓴 사람 추출시 REST_REVIEW 테이블만 써도 된다.
# 1. REST_REVIEW 테이블에서 최다 리뷰쓴 사람의 id를 구한다.
# 2. 두 테이블을 member_id 기준으로 조인한 후
# 3. 1번에서 나온 사람의 id를 기준으로 where문에서 조건을 걸어준다.
# 4. 이후 결과값 출력, 정렬
select MEMBER_NAME , REVIEW_TEXT, DATE_FORMAT(REVIEW_DATE, "%Y-%m-%d") AS REVIEW_DATE
from MEMBER_PROFILE M join REST_REVIEW R
on M.MEMBER_ID = R.MEMBER_ID
where M.MEMBER_ID = (select MEMBER_ID from REST_REVIEW group by MEMBER_ID order by count(MEMBER_ID) desc limit 1)
order by REVIEW_DATE, REVIEW_TEXT
'프론트엔드' 카테고리의 다른 글
pwa 웹앱 설치하기 - manifest.json (0) | 2023.11.26 |
---|---|
네이티브 앱, 웹앱, 웹뷰(하이브리드앱) (0) | 2023.11.19 |
강제로 리렌더링 시키기 (0) | 2023.10.29 |
api 호출하여 파일 다운 후 chrome에서 다운로드 팝업 띄우기 (0) | 2023.10.17 |
Chrome Network 패널 (0) | 2023.07.03 |