SQL에서 LAG와 LEAD 함수를 활용하는 방법

핵심 원리

LAG와 LEAD 함수는 SQL에서 데이터 분석 작업에 사용되는 윈도우 함수입니다. LAG 함수는 현재 행의 이전 행의 값을 반환하고, LEAD 함수는 현재 행의 다음 행의 값을 반환합니다. 이 함수들은 데이터를 시간 순서나 기타 순서대로 정렬하고, 그 순서에 따라 이전 또는 다음 행의 값을 참조할 때 유용합니다.

실무에서 쓰이는 이유

LAG와 LEAD 함수는 시간이나 순서에 민감한 데이터 분석에서 자주 사용됩니다. 예를 들어, 매출 데이터에서 이전 달과의 비교, 주식 시장에서 전일 대비 변화 등을 분석할 때 이 함수들을 사용하여 쉽게 비교할 수 있습니다.

실무에서 구체적으로 어떤 상황일 경우 사용되는지 예상 상황 예측

  • 비교 분석: LAG 함수를 사용하여 현재 행과 이전 행을 비교하여 매출의 증감 추이를 분석합니다.
  • 추세 분석: LEAD 함수를 사용하여 다음 행과 비교하여 향후 예상 추세를 도출할 수 있습니다.
  • 시계열 데이터: 날짜 또는 시간 기준으로 정렬된 데이터에서 특정 시점 전후의 데이터를 비교할 때 사용됩니다.

연습 문제

  1. 사원 테이블에서 직업이 ‘ANALYST’ 또는 ‘MANAGER’인 사원들의 사원 번호, 이름, 입사일, 바로 전 행과 바로 다음 행의 입사일을 출력하는 SQL 쿼리를 작성하시오.
  2. 전체 사원 중 급여 순서로 정렬하고, 각 사원의 사원 번호와 현재 급여, 바로 전 사원의 급여를 출력하는 SQL 쿼리를 작성하시오.

연습문제 해답

  1. SELECT empno, ename, hiredate, LAG(hiredate,1) over (order by hiredate asc) as "전 행", LEAD(hiredate,1) over (order by hiredate asc) as "다음 행" FROM emp WHERE job in ('ANALYST', 'MANAGER');
   SELECT empno, sal,
          LAG(sal,1) over (order by sal asc) as "전 행 급여"
     FROM emp;

응용 문제

  • 각 부서 내에서 입사일 기준으로 직원을 정렬하고, 그 직원의 바로 전 입사일과 바로 다음 입사일을 구하여 출력하는 SQL 쿼리를 작성하시오.

응용문제 해답

   SELECT deptno, empno, ename, hiredate,
          LAG(hiredate,1) over (partition by deptno order by hiredate asc) as "전 행",
          LEAD(hiredate,1) over (partition by deptno order by hiredate asc) as "다음 행"
     FROM emp;

전자상거래 업계에서 쓰일 수 있는 경우 2가지

  1. 고객 구매 패턴 분석: 특정 고객의 이전 구매 내역과 다음 구매 내역을 비교하여 구매 주기나 선호하는 상품군을 분석할 때 사용될 수 있습니다.
  2. 매출 데이터 분석: 특정 상품의 매출 변동을 분석하고, 이전 판매 기간과 다음 판매 기간을 비교하여 프로모션의 효과를 측정할 때 유용합니다.

전자상거래 업계에서 응용할 수 있는 경우의 SQL 코드 예시 및 테이블 제시

  1. 고객 구매 패턴 분석:
   SELECT customer_id, order_date, product_id,
          LAG(order_date,1) over (partition by customer_id order by order_date asc) as "이전 구매 일자",
          LEAD(order_date,1) over (partition by customer_id order by order_date asc) as "다음 구매 일자"
     FROM orders;
  1. 매출 데이터 분석:
   SELECT product_id, sale_date, sales_amount,
          LAG(sales_amount,1) over (partition by product_id order by sale_date asc) as "이전 매출",
          LEAD(sales_amount,1) over (partition by product_id order by sale_date asc) as "다음 매출"
     FROM sales;

Posts created 411

Related Posts

Begin typing your search term above and press enter to search. Press ESC to cancel.

Back To Top