Data Analysis 데이터 분석/SQL 통한 Database 관리

lag()

Queen Julia 2024. 8. 18. 16:58

`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