250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- with절
- 데이터리안넥스트레벨챌린지
- mysql
- 티스토리챌린지
- join
- 프로그래머스
- 문풀
- levle1
- 그로스해킹
- 파이썬
- 활성사용자수
- SQL
- 코테후기
- SQL고득점KIT
- 서브쿼리
- 위키독스
- 셀프조인
- leetcode문풀
- 시간함수
- sql50
- sql문풀
- 데벨챌
- leetcode
- 파이썬문풀
- 데이터리안
- 오블완
- 데이터분석
- 프로그래머스문풀
- 데이터리안실전반
- 코테준비
Archives
- Today
- Total
꿈은 데이터분석가, 취미는 계획
[MY SQL] DENSE_RANK를 활용하여 리뷰를 가장 많이 작성한 회원의 리뷰 조회 본문
728x90
출처: [프로그래머스 스쿨 - 코딩테스트 연습 - MY SQL 문제] : 그룹별 조건에 맞는 식당 목록 출력하기
링크: https://school.programmers.co.kr/learn/courses/30/lessons/131124
문제(일부): 고객정보 테이블과 고객리뷰테이블에서 주문이 가장 많은 회원의 리뷰정보 불러오기
윈도우 함수 PERCENT_RANK활용하기
0) 최대리뷰 수가 같은 회원이 있을 것이라고 예상 => 조회 시 최대리뷰 작성자가 3명 출력
1) 작성자별 리뷰 수 count를 위한 with절 생성
필터링을 위해 DENSE_RANK 윈도우함수를 사용하여 리뷰수가 많은 순으로 등급부여
* 순위가 동일할 경우 같은 순위 부여
ex) 3,3,3,2,2,1 => 1등,1등,1등,2등,2등,3등
2) 메인쿼리에서 2개의 테이블을 join
where절에서 리뷰수 1위인 작성자만 필터링(서브쿼리)
-- 아이디별 리뷰 작성 수를 구하는 WITH절
WITH TOTAL_REVIEW AS (
SELECT MEMBER_ID
,DENSE_RANK() OVER (ORDER BY COUNT(REVIEW_ID) DESC) AS REVIEW_RANK
FROM REST_REVIEW
GROUP BY MEMBER_ID)
-- 2개의 테이블을 join, where절에서 랭킹1위인 id만 필터링
SELECT PRO.MEMBER_NAME
,REV.REVIEW_TEXT
,DATE_FORMAT(REV.REVIEW_DATE,"%Y-%m-%d") REVIEW_DATE
FROM MEMBER_PROFILE PRO
INNER JOIN REST_REVIEW REV
ON PRO.MEMBER_ID = REV.MEMBER_ID
WHERE REV.MEMBER_ID IN (SELECT MEMBER_ID
FROM TOTAL_REVIEW
WHERE REVIEW_RANK = 1)
ORDER BY REV.REVIEW_DATE, REV.REVIEW_TEXT
728x90
'SQL > SQL문풀' 카테고리의 다른 글
[MY SQL] 특정 카테고리의 스킬을 보유한 개발자 조회 (0) | 2024.04.28 |
---|---|
[MY SQL] 특정년도에 가입한 회원 중 구매한 회원 수, 비율 구하기 (0) | 2024.04.28 |
[MY SQL] WITH절을 활용하여 평가등급 및 성과금 조회 (1) | 2024.04.21 |
[MY SQL] 언어별 개발자 분류하기_비트 연산자 활용 (0) | 2024.04.21 |
[MY SQL] 상/하반기 점수의 합이 가장 높은 사원 찾기 (1) | 2024.04.18 |