순위관련
RANK(), DENSE_RANK(), ROW_NUMBER()
설명
Rank() - 해당행에 대한 우선순위를 결정한다(중복우선순위 o)
Dense_Rank() - 해당행에 대한 우선순위를 결정한다(중복우선순위 x)
Row_number() - 조건을 만족한느 모든 행의 번호를 결정한다
OVER() - ORDER BY, GROUP BY 서브쿼리를 개선하기 위해 나온 함수
- 집계함수 뒤에서 사용하며, 집계함수 외의 컬럼을 그룹으로 묶어준다.
OVER() 에 사용되는 OPTION
1. PARTITION BY : 그룹에서 파티션을 짓는다.
2. ORDER BY DESC
3. NULLS FIRST : NULL 데이터를 먼저 출력.
4. NULLS LAST : NULL 데이터를 나중에 출력.
#Temp 테이블
코드
1 2 3 4 5 | SELECT V, RANK() OVER(ORDER BY V), DENSE_RANK() OVER(ORDER BY V), RANK() OVER(ORDER BY V) FROM #TEMP | cs |
실행결과
OVER() 함수
COUNT(*)OVER() : 전체행 카운트
COUNT(*)OVER(PARTITION BY 컬럼) : 그룹단위로 나누어 카운트
MAX(컬럼)OVER() : 전체행 중에 최고값
MAX(컬럼)OVER(PARTITION BY 컬럼) : 그룹내 최고값
MIN(컬럼)OVER() : 전체행 중에 최소값
MIN(컬럼)OVER(PARTITION BY 컬럼) : 그룹내 최소값
SUM(컬럼)OVER() : 전체행 합
SUM(컬럼)OVER(PARTITION BY 컬럼) : 그룹내 합
AVG(컬럼)OVER() : 전체행 평균
AVG(컬럼)OVER(PARTITION BY 컬럼) : 그룹내 평균
STDDEV(컬럼)OVER() : 전체행 표준편차
STDDEV(컬럼)OVER(PARTITION BY 컬럼) : 그룹내 표준편차
RATIO_TO_REPORT(컬럼)OVER() : 현재행값/SUM(전체행값)
RATIO_TO_REPORT(컬럼)OVER(PARTITION BY 컬럼) : 현재행값 / SUM(그룹행값)
'SQL > MS-SQL' 카테고리의 다른 글
NULL 비교하기 (0) | 2017.09.19 |
---|---|
일반집계함수 WINDOW FUNCTION (0) | 2017.09.07 |
트리거(Trigger) (0) | 2017.09.06 |
커서(Cursor) (0) | 2017.09.06 |
UNION ALL로 소계, 합계 구하기 (0) | 2017.09.05 |