윈도우 함수 총정리

dorongpark·2024년 8월 19일
0

해커랭크(sql)

목록 보기
16/20
  • 주요 포인트
    ㄴ 윈도우 함수의 정의와 윈도우 함수를 쓰는 이유 이해하기
    ㄴ 어떤 종류의 윈도우 함수가 있는지 인지하기
    ㄴ 어떤 상황에서 그 윈도우 함수가 쓰여야 하는지 이해하기

1. 윈도우 함수란?

*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.1 윈도우 함수의 기본 형식

1.윈도우_함수(컬럼명) 2.OVER (3.PARTITION BY 컬럼명 4. ORDER BY 컬럼명)

  • 1.(의무)윈도우 함수: 집계 함수(sum, avg, count, max, min 등), 순위 함수(row_number(), rank(), dense_rank() 등), 값 분석 함수 (lag(), lead(), first_Value(), last_value() 등)를 사용

집계 함수 (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;
  • employees 테이블

  • sum(salary) over(partition by department_id order by employee_id)
    : 부서별 사번 순서대로(오름차순) 급여를 누적 합

순위 함수 (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 : 특정 윈도우 함수에서는 필요에 따라 반드시 사용해야 함

      1. order by가 필수인 경우
      : 일부 윈도우 함수는 순서,순위에 의존하므로, order by가 필수
      예를 들어, 순위를 통해 함수를 계산 하거나, 이전/다음 행을 참조하는 함수일 경우 order by가 필수다.
      -필수 함수: ROW_NUMBER(), RANK(), DENSE_RANK(), LAG(), LEAD(), FIRST_VALUE(), LAST_VALUE() 등
      2. order by가 선택 사항인 경우
      : 다른 집계 함수들은 필요에 따라 사용
      -선택사항인 함수: SUM, AVG, COUNT 등 집계 함수

profile
야 너도 분석 할수 있어

0개의 댓글