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() 함수의 주요 특징
- 다음 행의 값 조회
- 기본적으로 다음 행의 값을 반환합니다.
- N번째 이후 값 조회 가능
- offset을 지정하면 N번째 이후 값을 참조합니다.
- 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() 함수 활용 사례
- 변화 분석
- 특정 행과 다음 행 간의 차이를 계산:
SELECTemployee_id,salary,LEAD(salary) OVER (ORDER BY employee_id) - salary AS salary_differenceFROM employees;
- 특정 행과 다음 행 간의 차이를 계산:
- 시간대별 데이터 비교
- 특정 날짜와 다음 날짜 간의 매출 변화:
SELECTsales_date,sales_amount,LEAD(sales_amount) OVER (ORDER BY sales_date) AS next_day_salesFROM sales;
- 특정 날짜와 다음 날짜 간의 매출 변화:
- 비교 결과 생성
- 고객의 구매 이력에서 다음 구매 제품 비교:
SELECTcustomer_id,product_id,LEAD(product_id) OVER (PARTITION BY customer_id ORDER BY purchase_date) AS next_productFROM purchases;
- 고객의 구매 이력에서 다음 구매 제품 비교:
LEAD()와 LAG() 비교
함수설명
LEAD | 현재 행 기준으로 다음 행의 값을 반환 |
LAG | 현재 행 기준으로 이전 행의 값을 반환 |
요약
- LEAD() 함수는 다음 행의 값을 참조하거나, offset으로 N번째 이후 값을 조회하는 데 유용합니다.
- OVER() 절을 활용하여 정렬(ORDER BY)과 그룹화(PARTITION BY)를 설정할 수 있습니다.
- 데이터 분석, 시계열 데이터 처리, 또는 변화 추적에 매우 효과적인 윈도우 함수입니다.
300x250
'IT > DB' 카테고리의 다른 글
DBMS 뜻? 종류? (1) | 2024.11.27 |
---|---|
데이터베이스 SQL COALESCE 함수 사용하는 방법 (0) | 2024.11.25 |
mysql workbench 자동 대문자 변환하는 방법 (0) | 2024.11.21 |
PK 2개일 경우 인덱스 특징 (0) | 2024.11.21 |
pk 1개 테이블과 2개 테이블의 차이점 (0) | 2024.11.19 |