TIL

👀Today I Learn

LEAD 함수란?

  • MySQL의 LEAD() 함수는 윈도우 함수(Window Function) 중 하나로, 특정 행을 기준으로 뒤에 위치한 행(row offset)의 값을 조회하는 함수
  • 주로 시계열 데이터 분석, 순차적 데이터 처리, 또는 다음 값과 현재 값을 비교할 때 유용하게 사용됨


LEAD 함수 문법

LEAD(column_name, offset, default_value) OVER (
    PARTITION BY partition_column
    ORDER BY order_column
)
  • column_name: 값을 가져올 대상 컬럼
  • offset(선택 사항): 현재 행에서 몇 개 뒤의 행 값을 가져올지 지정(기본값: 1)
  • default_value(선택 사항): 가져올 행이 없을 경우 사용할 기본값(기본값: NULL)
  • PARTITION BY partition_column(선택 사항): 그룹별(PARTITION BY)로 나누어 LEAD()를 실행할 수 있음
  • ORDER BY order_column : 데이터를 정렬하는 기준


LEAD() 함수 예제

1. 기본적인 사용법

  • 주문 테이블에서 다음 주문 금액 조회하기

    • 아래와 같은 orders 테이블이 있다고 가정

      CREATE TABLE orders (
          id INT AUTO_INCREMENT PRIMARY KEY,
          customer_id INT,
          order_date DATE,
          amount DECIMAL(10,2)
      );
      
      INSERT INTO orders (customer_id, order_date, amount) VALUES
      (1, '2024-01-01', 100.00),
      (1, '2024-01-05', 200.00),
      (2, '2024-01-10', 150.00),
      (2, '2024-01-15', 250.00),
      (3, '2024-02-01', 300.00);
      
  • 다음 SQL을 실행하면, 각 주문 행에서 다음 주문 금액을 가져올 수 있음

      SELECT id, customer_id, order_date, amount,
          LEAD(amount, 1, 0) OVER (PARTITION BY customer_id ORDER BY order_date) AS next_amount
      FROM orders
    
  • 실행 결과

    id customer_id order_date amount next_amount
    1 1 2024-01-01 100.00 200.00
    2 1 2024-01-05 200.00 NULL
    3 2 2024-01-10 150.00 250.00
    4 2 2024-01-15 250.00 NULL
    5 3 2024-02-01 300.00 NULL
    • LEAD(amount, 1, 0)을 사용하여 다음 행의 값이 없을 경우 0을 반환하도록 설정했습니다.

2. LEAD()를 활용한 트렌드 분석

  • LEAD()를 활용하여 현재 주문 금액과 다음 주문 금액을 비교하여 트렌드를 분석할 수도 있음

      SELECT id, customer_id, order_date, amount,
          LEAD(amount) OVER (PARTITION BY customer_id ORDER BY order_date) AS next_amount,
          CASE
              WHEN LEAD(amount) OVER (PARTITION BY customer_id ORDER BY order_date) > amount THEN '증가'
              WHEN LEAD(amount) OVER (PARTITION BY customer_id ORDER BY order_date) < amount THEN '감소'
              ELSE '유지'
          END AS trend
      FROM orders
    
  • 실행 결과

    id customer_id order_date amount next_amount trend
    1 1 2024-01-01 100.00 200.00 증가
    2 1 2024-01-05 200.00 NULL 유지
    3 2 2024-01-10 150.00 250.00 증가
    4 2 2024-01-15 250.00 NULL 유지
    5 3 2024-02-01 300.00 NULL 유지
    • CASE 문을 활용하여 현재 금액과 다음 주문 금액을 비교하여 트렌드(증가, 감소, 유지)를 분석할 수 있음


LEAD() 함수 정리

  • ✅ LEAD() 함수는 현재 행을 기준으로 다음 행의 값을 조회하는 데 사용됨
  • ✅ PARTITION BY를 사용하면 고객별, 카테고리별 등 그룹별로 분석할 수 있음
  • ✅ ORDER BY를 사용하여 정렬 순서를 명확하게 지정해야 올바른 결과를 얻을 수 있음
  • ✅ LEAD()를 활용하면 트렌드 분석, 비교 분석 등 다양한 데이터 분석에 유용



💡Today I Thought

오늘의 체크리스트

  • 알고리즘 코드카타 327
  • SQL 코드카타 109
  • 자격증 공부
  • TIL 작성

회고

 SQL 코드카타를 풀다가 LEAD라는 함수가 나와서 공부를 해봤다. 아직도 모르는 함수가 가득해. 언제쯤 검색없이 문제를 해결할 수 있는지 몰라🤔 오늘 공부는 조금 일찍 마무리~! 오후에는 조금 쉬고 내일부터 열심히 달려야겠다.🏃‍♂️

댓글남기기