`LAG()` 함수는 SQL의 윈도우 함수 중 하나로, 현재 행의 값과 이전 행의 값을 비교할 수 있게 해줍니다. 주로 시간 순서나 순차적인 데이터에서 이전 데이터와의 비교를 필요로 할 때 유용합니다.
### `LAG()` 함수의 기본 구조
```sql
LAG(expression, offset, default) OVER (PARTITION BY partition_expression ORDER BY order_expression)
```
- **`expression`**: 이전 행에서 가져올 열 또는 표현식입니다.
- **`offset`** (선택적): 현재 행에서 몇 개의 이전 행을 참조할지를 지정합니다. 기본값은 1입니다.
- **`default`** (선택적): 이전 행이 없을 경우 반환할 기본 값입니다. 기본값은 NULL입니다.
- **`PARTITION BY`** (선택적): 데이터를 그룹화할 기준 열입니다. 지정하지 않으면 전체 데이터에 대해 처리합니다.
- **`ORDER BY`**: 데이터의 정렬 순서를 정의합니다. 이 순서에 따라 이전 행을 참조합니다.
### 사용 예제
#### 예제 테이블
가정: `sales` 테이블에 판매 데이터가 저장되어 있습니다.
| sale_date | sales_amount |
|-----------|--------------|
| 2024-01-01 | 1000 |
| 2024-01-02 | 1200 |
| 2024-01-03 | 1100 |
| 2024-01-04 | 1300 |
#### 기본 사용 예제
현재 행의 `sales_amount`와 이전 날의 `sales_amount`를 비교합니다:
```sql
SELECT
sale_date,
sales_amount,
LAG(sales_amount, 1, 0) OVER (ORDER BY sale_date) AS previous_day_sales
FROM sales;
```
**결과**:
| sale_date | sales_amount | previous_day_sales |
|-----------|--------------|--------------------|
| 2024-01-01 | 1000 | 0 |
| 2024-01-02 | 1200 | 1000 |
| 2024-01-03 | 1100 | 1200 |
| 2024-01-04 | 1300 | 1100 |
- **`LAG(sales_amount, 1, 0)`**: `sales_amount`의 한 행 이전 값을 가져오며, 이전 값이 없을 경우 기본값 `0`을 사용합니다.
- **`ORDER BY sale_date`**: `sale_date`를 기준으로 정렬하여 이전 행의 값을 가져옵니다.
#### `PARTITION BY`와 함께 사용
부서별로 `sales_amount`의 이전 값을 비교합니다:
```sql
SELECT
department_id,
sale_date,
sales_amount,
LAG(sales_amount, 1, 0) OVER (PARTITION BY department_id ORDER BY sale_date) AS previous_day_sales
FROM sales;
```
이 쿼리는 각 부서별로 `sales_amount`의 이전 값을 비교합니다.
### 요약
- `LAG()` 함수는 현재 행의 값과 이전 행의 값을 비교하는 데 유용합니다.
- `PARTITION BY`와 `ORDER BY`를 사용하여 특정 그룹 내에서 또는 전체 데이터에서 이전 값을 참조할 수 있습니다.
- 기본적으로 이전 행의 값을 반환하며, 이전 행이 없을 경우에는 기본값을 반환할 수 있습니다.
이 함수는 데이터 분석 및 시계열 데이터 처리에서 과거 값과의 비교가 필요할 때 매우 유용합니다.
'Data Analysis 데이터 분석 > SQL 통한 Database 관리' 카테고리의 다른 글
rownum, row_number (0) | 2024.08.18 |
---|---|
rownum, row_number 동일 순위 있는 경우 (0) | 2024.08.18 |
with grant option (0) | 2024.08.18 |
grant() (0) | 2024.08.18 |
drop schema employee cascade (0) | 2024.08.18 |