바닥코딩
윈도우 함수(1/2) 본문
WINDOW 함수?
WINDOW 함수는 흔히 분석 함수 또는 순위 함수로도 알려져 있습니다. 윈도우 함수는 데이터 웨어하우스에서 발전한 기술로서 인라인 뷰와 같이 SQL의 주요 기능이라고 할 수 있으며 많은 튜닝팁을 대체할 수 있는 수단이 됩니다
윈도우 함수에는 기존에 사용하던 집계 함수도 있고 새로이 전용함수로 추가된기능도 존재합니다. 그리고 다른 함수와는 달리 중첩해서 사용하지는 못하지만, 서브쿼리에서는 사용이 가능합니다. 또한 윈도우 함수에는 OVER라는 키워드가 필수로 포함되어 있습니다. WINDOW 함수의 기본적인 형식과 종류는 아래와 같습니다
SELECT WINDOW_FUNCTION (ARGUMENTS) OVER
([PARTITION BY 컬럼][ORDER BY절] [WINDOWING 절])
FROM 테이블명
- ARGUMENTS : 인수, 함수에 따라 0개일수도 있고 여러개일수도 있다
- PARTITION BY : 전체 집합을 기준을 정래 소그룹으로 나눈다
- WINDOWING : 함수의 대상이 되는 행 기준의 범위를 정할 수 있다
윈도우 함수 종류
- 그룹 내 순위 함수 : EX)RANK , DENSE_RANK, ROW_NUMBER
- 그룹 내 집계 함수 : EX) SUM, MAX, MIN, COUNT , AVG
- 그룹 내 행 순서에 대한 함수 : EX) FIRST_VALUE, LAST_VALUE, LAG, LEAD (ORACLE 에서만 지원하는 기능)
- 그룹 내 비율 관련 함수 : EX) CUME_DIST, PERCENT_RANK, NTILE, RATIO_TO_REPORT
종류별 WINDOW 함수
그렇다면 직접 SQL 코드를 통해 윈도우 함수에 대해 알아보겠습니다 (위에 언급된 모든 함수를 다루지는 않갰습니다)
1-1 RANK 함수
이러한 구조의 스키마 에서 EMPLOYEES TABLE은 아래와 같은 데이터들이 들어 있습니다
그렇다면 이 데이터들을 SALARY 컬럼의 값을 기준으로 순위를 매겨 보겠습니다
위에 문장을 수행하면
이러한 결과를 반환하게 됩니다 SALARY를 기준으로 내림차순 정렬을 했기 때문에 높은 순위별로 나타내 지며 직업 ID 별로 순서를 반환해 줍니다 근데 위를 보면 2위가 두명 7위가 두명 11위가 3명 등등 이렇게 공동순위에 대해서는 동일한 순위를 부여한다는 것을 알 수 있습니다. 다음으로는 RANK 와 유사한 DENSE_RANK에 대해서 알아보겠습니다
1-2 DENSE_RANK 함수
DENSE_RANK 함수는 RANK 함수와 흡사하나 동일한 순위를 하나의 건수로 취급합니다 DENSE_RANK와 RANK 함수를 비교 해보겠습니다.
위와 같은 문장을 실행하면 RANK와 DENSE_RANK의 차이를 알 수 있습니다
위에 쿼리를 실행한 결과이며 동일 순위에 대한 출력결과가 서로 다른 것을 확인할 수 있습니다. 또한 ROW_NUMBER함수를 통해 RANK 나 DENSE_RANK 함수가 동일한 값에 대해서는 동일한 값을 수행하는 것에 반해 고유 순위를 부여 할 수 도 있습니다
지금까지 순위에 대한 WINDOW FUNCTION이였습니다 다음 포스팅에 이어서 나머지 종류의 WINDOW_FUNCTION에 대한 예제를 업로드 하겠습니다
'데이터 베이스 > SQL' 카테고리의 다른 글
윈도우 함수(2/2) (0) | 2020.03.17 |
---|---|
계층형 질의 (0) | 2020.03.12 |
서브쿼리 (0) | 2020.03.10 |
그룹 함수(GROUP FUNCTION) (0) | 2020.03.05 |
STANDARD SQL과 집합 연산자(SET OPERATOR) (0) | 2020.03.04 |