728x90
728x90
안녕하세요. My SQL을 독학하고 있는 꼰정입니다,, 👾
오늘은 행에 순위를 부여해주는 윈도우 함수들을 알아볼게요!
먼저 윈도우 함수의 개념을 간단하게 말씀드릴게요.
윈도우 함수는, 행과 행간의 데이터를 비교, 분석, 연산하기 위한 함수입니다.
더 간단하게 설명하자면,
셀 = 윈도우 라고 생각하시면 됩니다.
네모난 셀이 꼭 창문을 닮지 않았나요? 🪟
순위를 비교, 분석, 연산하는 window 함수 알아볼게요!
반응형
| 순위를 부여하는 window 함수
RANK, DENSE_RANK, ROW_NUMBER는 대표적으로 행에 순위 부여 시 사용되는 함수입니다.
함수 | 의미 | 출력 예시 |
RANK | 동일 순위 적용, 동일 순위 다음 행은 동일 순위의 수 만큼 숫자를 건너뜀 | 1 , 1 , 3 , 4 , 4 , 6 |
DENSE_RANK | 동일 순위 적용, 동일 순위 다음 행은 순차적으로 표시 | 1 , 1 , 2 , 3 , 4 , 4 , 5 , 6 |
ROW_NUMBER | 말 그대로, 행의 순서를 출력합니다. | 1 , 2 , 3 , 4 , 5 , 6 |
쿼리문 작성 시 뼈대는 아래와 같아요.
RANK () OVER ( PARTITION BY [컬럼명] ORDER BY [컬럼명] )
DENSE_RANK () OVER ( PARTITION BY [컬럼명] ORDER BY [컬럼명] )
ROW_NUMBER () OVER ( PARTITION BY [컬럼명] ORDER BY [컬럼명] )
그럼 이제 예문을 통해 순위 함수를 살펴보겠습니다.
예시)
🙌 가장 많이 구매한 고객 및 순위를 확인하고 싶어요.
- Table: Order_list
- Column: customer_id, price
SELECT customer_id
, SUM(price)
, RANK() OVER (ORDER BY price DESC) AS 'RANK'
, DENSE_RANK() OVER (ORDER BY price DESC) AS 'DENSE_RANK'
, ROW_NUMBER() OVER (ORDER BY price DESC) AS 'ROW_NUMBER'
FROM order_list ;
순위 함수를 적용한 데이터들의 결과 값에 차이가 보이시나요!?
RANK와 DENSE_RANK 모두 공동 순위를 인정하지만,
후순위 데이터를 처리하는 방식이 상이한 것을 확인할 수 있습니다.
ROW_NUMBER는 행 순서대로 출력되었어요.
만약 고객별 구매 순위를 요청할때에는,
공동순위를 염두에 두고 출력할 것인지 그리고 공동순위 발생 시 후순위 랭크 처리를 어떻게 진행할 것인지 목적을 정하고 적절한 순위 함수를 선택해야겠죠!?
그럼 다음 포스팅에서 또 다른 예제로 인사드릴게요 - 👩🏻💻
728x90
728x90
'TOOLS > My SQL' 카테고리의 다른 글
[My SQL] DAU/WAU/MAU 활성 유저(Active User) 집계 / Stickness 지표 (1) | 2023.03.14 |
---|---|
[My SQL] DATEDIFF와 TIMEDIFF / 날짜와 시간 차이 반환 / 고객 구매 주기 분석 (0) | 2023.03.11 |
[My SQL] 고객 세분화(Customer Segmentation) 확인 - 인구 통계 정보 산출 쿼리문 (0) | 2023.03.06 |
[SQL개발자] SQLD 자격증 시험 독학 / 노베이스 공부 방법 총 정리! (0) | 2023.03.05 |
[My SQL] LIMIT과 OFFSET / 원하는 행만 출력하기 (0) | 2023.03.03 |