본문 바로가기

IT/DB

데이터베이스 SQL에서 다음행 찾는 LEAD( ) OVER ( ) 함수

300x250

 

 

 

SQL의 LEAD() 함수윈도우 함수의 하나로, 특정 행의 다음 행 값을 참조하는 데 사용됩니다.

 

데이터를 행 단위로 비교하거나 분석할 때 유용하며, OVER() 절과 함께 사용됩니다.

 


LEAD() 함수 문법

 
LEAD(column_name, offset, default_value) OVER (PARTITION BY partition_column ORDER BY order_column)
 
  • column_name: 다음 행의 값을 가져올 대상 컬럼.
  • offset (선택): 몇 번째 이후의 값을 가져올지 지정 (기본값: 1).
  • default_value (선택): 다음 행이 없을 때 반환할 값 (기본값: NULL).
  • OVER():
    • PARTITION BY (선택): 데이터를 그룹화(파티션)하여 윈도우 함수가 적용됩니다.
    • ORDER BY: 데이터를 정렬하여 다음 행을 결정합니다.

 

LEAD() 함수의 주요 특징

  1. 다음 행의 값 조회
    • 기본적으로 다음 행의 값을 반환합니다.
  2. N번째 이후 값 조회 가능
    • offset을 지정하면 N번째 이후 값을 참조합니다.
  3. NULL 처리 가능
    • 데이터의 마지막 행에는 기본적으로 NULL을 반환하지만, default_value를 사용하면 다른 값을 지정할 수 있습니다.

 

LEAD() 함수 사용 예제

1. 기본 사용: 다음 행의 값 조회

아래는 직원들의 월급(salary)을 조회하고, 각 행에서 다음 직원의 월급을 표시하는 예제입니다.

 
SELECT employee_id, salary, LEAD(salary) OVER (ORDER BY salary) AS next_salary 
FROM employees;
 

 

결과:

employee_id salary next_salary
1 3000 4000
2 4000 5000
3 5000 NULL

 

  • LEAD(salary)는 다음 행의 salary 값을 반환합니다.
  • 마지막 행에는 다음 값이 없으므로 NULL이 반환됩니다.

2. PARTITION BY로 그룹화

부서별로 데이터를 나누고, 다음 직원의 월급을 비교합니다.

 
SELECT 
department_id, 
employee_id,
salary, 
LEAD(salary) OVER (PARTITION BY department_id ORDER BY salary) AS next_salary 
FROM employees;

 

결과:

department_id employee_id salary next_salary
1 101 3000 4000
1 102 4000 NULL
2 201 3500 4500
2 202 4500 NULL
  • PARTITION BY department_id: 부서별로 데이터를 나누어 각 부서 내에서 정렬과 LEAD()가 적용됩니다.

 


3. offset과 default_value 사용

다음 2번째 행의 값을 가져오며, 값이 없으면 "No Data"를 반환합니다.

 
SELECT 
employee_id, 
salary, 
LEAD(salary, 2, 'No Data') OVER (ORDER BY salary) AS second_next_salary 
FROM employees;

 

결과:

employee_id salary second_next_salary
1 3000 5000
2 4000 No Data
3 5000 No Data
  • LEAD(salary, 2): 현재 행에서 두 번째 이후의 값을 참조.
  • default_value: 값이 없을 때 기본값으로 'No Data'를 반환.

 

LEAD() 함수 활용 사례

  1. 변화 분석
    • 특정 행과 다음 행 간의 차이를 계산:
       
      SELECT
      employee_id,
      salary,
      LEAD(salary) OVER (ORDER BY employee_id) - salary AS salary_difference
      FROM employees;
  2. 시간대별 데이터 비교
    • 특정 날짜와 다음 날짜 간의 매출 변화:
       
      SELECT
      sales_date,
      sales_amount,
      LEAD(sales_amount) OVER (ORDER BY sales_date) AS next_day_sales
      FROM sales;
  3. 비교 결과 생성
    • 고객의 구매 이력에서 다음 구매 제품 비교:
       
      SELECT
      customer_id,
      product_id,
      LEAD(product_id) OVER (PARTITION BY customer_id ORDER BY purchase_date) AS next_product
      FROM purchases;

LEAD()와 LAG() 비교

함수설명

LEAD 현재 행 기준으로 다음 행의 값을 반환
LAG 현재 행 기준으로 이전 행의 값을 반환

 

요약

  • LEAD() 함수는 다음 행의 값을 참조하거나, offset으로 N번째 이후 값을 조회하는 데 유용합니다.
  • OVER() 절을 활용하여 정렬(ORDER BY)과 그룹화(PARTITION BY)를 설정할 수 있습니다.
  • 데이터 분석, 시계열 데이터 처리, 또는 변화 추적에 매우 효과적인 윈도우 함수입니다.

 

 

 

300x250