분석함수는 데이터 그룹을 기반으로 앞뒤 행을 계산하거나 그룹에 대한 누적 분포, 상대 순위 등을 계산합니다.
그룹마다 여러 행을 반환합니다.
앞뒤 행을 비교하여 데이터 처리를 해야 하는 경우 LAG 또는 LEAD 함수를 사용합니다.
LAG 함수는 현재 행에서 바로 앞의 행을 조회해서 데이터를 처리합니다.
LEAD 함수는 현재 행에서 바로 뒤의 행을 조회해서 데이터를 처리합니다.
값에 따라 이전 또는 이후 몇 번째 행을 참조할지 결정할 수도 있습니다.
# LAG 예시
SELECT
FIELD1,
ENGLISH,
LAG(ENGLISH) OVER (ORDER BY FIELD1) AS PREV_ENGLISH
FROM data;
현재 행의 ENGLISH 점수보다 한 줄 위의 ENGLISH 점수를 가져옵니다.
# LEAD 예시
SELECT
FIELD1,
SCIENCE,
LEAD(SCIENCE) OVER (ORDER BY FIELD1) AS NEXT_SCIENCE
FROM data;
현재 행의 SCIENCE 보다 한 줄 아래의 SCIENCE 점수를 가져옵니다.
그룹 내에서 누적 분포를 계산합니다.
그룹에서 데이터 값이 포함되는 위치의누적 분포를 계산합니다.
함수는 0초과 1이하의 범위 값을 반환합니다.
같은 값은 항상 같은 누적 분폿값을 계산합니다. NULL 값을 포함하고 있으며 NULL 값은 데이터 집합에서 가장 낮은 값으로 매겨집니다.
SELECT
FIELD1,
ENGLISH,
CUME_DIST() OVER (ORDER BY ENGLISH) AS ENGLISH_CUME_DIST
FROM data;
ENGLISH 점수를 오름차순으로 정렬한 수 누적 백분율을 계산합니다.
값이 작은 데이터부터 시작해서 누적된 비율이 증가합니다.
그룹 내의 상대 순위를 계산합니다.
CUME_DIST 와 비슷하지만 분포 순위를 계산합니다. 반환값 범위는 0초과 1이하의 값을 가집니다.
데이터 집합에서 첫 번째 행은 0부터 시작해 마지막 값은 1입니다.
NULL 값이 있다면 그룹 내에서 가장 낮은 값으로 매겨집니다. 상위 분포 순위를 계산할 때는 하나의 데이터를 간주합니다
SELECT
FIELD1,
ENGLISH,
PERCENT_RANK() OVER (ORDER BY ENGLISH) AS ENGLISH_PERCENT_RANK
FROM data;
ENGLISH 점수를 오름차순으로 정렬하고 백분위 순위를 계산합니다. 가장 낮은 학생은 0의 값을 가지고, 가장 높은 점수를 가진 학생은 1의 값을 가집니다.
그룹 내에서 첫 행 또는 마지막 행의 값을 구하여 데이터를 비교할 때 사용합니다.
FIRST_VALUE는 그룹에서 정렬된 데이터에서 첫 번째 행의 값을 반환합니다.
LAST_VALUE는 그룹에서 정렬된 데이터에서 마지막 행의 값을 반환합니다.
SELECT
FIELD1,
ENGLISH,
FIRST_VALUE(FIELD1) OVER (ORDER BY ENGLISH) AS FIRST_ENGLISH_STUDENT
FROM data;
점수를 오름차순으로 정렬한 수, 가장 낮은 점수를 가진 학생의 이름을 모든 행에 반환합니다. 점수가 가장 낮은 학생이 누군지 모든 행에서 확인할 수 있습니다.