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 |
Tags
- 셀프조인
- 활성사용자수
- leetcodesql50
- sql문풀
- UNION
- SQL
- leetcode문풀
- 코딩테스트
- mysql
- 프로그래머스문풀
- 파이썬
- levle1
- SQL고득점KIT
- 파이썬문풀
- 데이터분석
- 서브쿼리
- leetcode
- 위키독스
- SQL테스트
- 데이터리안
- With
- 프로그래머스
- with절
- 윈도우함수
- join
- 문풀
- 리트코드sql
- GROUPBY
- 코테
- 약수구하기
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 |