*Window(=데이터의 특정 그룹이나 범위 )
1) 어원: 윈도우는 말 그대로 "창" 이라는 뜻이고, 창을 통해 집 안을 본다고 가정해 보면
집 전체를 보는게 아니라, 창을 통해 보이는 일부만 볼 수 있음.
데이터에서도 마찬가지로, 전체 데이터 중 특정 행을 기준으로 일부 범위만을 설정 하고, 그 안에서 집계나 분석을 수행
2) 범위 지정 방법 : 데이터를 원하는 특정 부분(window)으로 정의 할 수 있는데, 지정하는 방법이
partition by(그룹 나누기, "계산 할 범위 지정")와 order by(그룹내 행 순서 정렬, "계산 할 방향/순서 지정"
)이다.
3) 집계 함수와 차이점
:윈도우 함수(WINDOW FUNCTION)는 각 행에 대해 연관된 데이터 그룹(윈도우)에 기반한 계산을 수행하는 함수. 즉, 집계 결과를 단일 값으로 반환 x, 각 행마다 계산된 값을 붙여주어 데이터를 그룹화 하지 않고 원래 행들을 유지
4) 윈도우 함수의 필요성 : 데이터의 특정 범위에서 계산 된 값을 유지하면서 더욱 복잡한 계산 가능
- 개별 행에 계산 값 추가 : 개별 행의 데이터는 유지하면서, 그 행별로 계산된 값을 추가 가능
예시 SUM()을 통한 누적 합계 계산
SELECT
employee_id,
salary,
SUM(salary) OVER (ORDER BY hire_date) AS cumulative_salary
FROM employees- 순위, 이동 평균 등 복잡한 계산이 간편
- 이전/다음 행과 비교 가능
1.윈도우_함수(컬럼명) 2.OVER (3.PARTITION BY 컬럼명 4. ORDER BY 컬럼명)
집계 함수 (Aggregate Functions)
: 데이터를 그룹으로 묶어 합계나 평균 등의 값을 계산합니다.
예: SUM(컬럼), AVG(컬럼), COUNT(컬럼), MAX(컬럼), MIN(컬럼)
ex)SELECT employee_id, salary, SUM(salary) OVER (PARTITION BY department_id ORDER BY employee_id) AS cumulative_salary FROM employees;
순위 함수 (Ranking Functions)
:각 행에 대해 순위를 매기거나, 특정 순서로 정렬된 데이터를 처리합니다.
예: ROW_NUMBER(), RANK(), DENSE_RANK()
ex)SELECT customer_id, order_date, ROW_NUMBER() OVER (ORDER BY order_date) AS row_num FROM orders;
값 분석 함수 (Value Functions)
: 이전 또는 이후 행의 값을 참조하거나, 이동 평균, 누적 합계를 계산합니다.
- LAG()- 이전 행의 값 반환
- LEAD()- 다음행의 값 반환
- FIRST_VALUE()- 윈도우 내 첫번째 값 반환
- LAST_VALUE()-윈도우 내 마지각 값 반환
ex)SELECT employee_id, salary, LAG(salary, 1) OVER (ORDER BY hire_date) AS previous_salary FROM employees
2.(의무)over : 윈도우 함수를 사용할 때 반드시 사용되는 키워드, over를 통해 각 행에 대해 어떤 범위를 기준으로 계산할지 지정
3.(선택)partition by
- 데이터를 특정 기준에 따라 그룹으로 나눌때 사용 (group by와 비슷)
- 윈도우 함수는 그룹 내 각 행에 대해 결과를 반환 (group by와 차이점)
- 예시
group by 사용 : 각 부서에 대한 하나의 결과만 반환, 개별행은 결과에서 사라짐
SELECT Department, SUM(Salary) AS DeptTotal
FROM Employees
GROUP BY Department
윈도우 함수 사용 : 부서별로 그룹을 나누고, 각 직원에 대해 그 그룹의 합계를 포함한 결과 반환,
"데이터의 요약 없이 개별 행 유지"
SELECT EmployeeID, Department, Salary,
SUM(Salary) OVER (PARTITION BY Department) AS DeptTotal
FROM Employees
1. order by가 필수인 경우
: 일부 윈도우 함수는 순서,순위에 의존하므로, order by가 필수
예를 들어, 순위를 통해 함수를 계산 하거나, 이전/다음 행을 참조하는 함수일 경우 order by가 필수다.
-필수 함수: ROW_NUMBER(), RANK(), DENSE_RANK(), LAG(), LEAD(), FIRST_VALUE(), LAST_VALUE() 등
2. order by가 선택 사항인 경우
: 다른 집계 함수들은 필요에 따라 사용
-선택사항인 함수: SUM, AVG, COUNT 등 집계 함수