콘텐츠로 건너뛰기

[SQL 인터뷰] LEAD()와 LAG()의 차이

데이터 분석가(Data Analyst) 기술 면접 시 다룰 수 있는 SQL 쿼리 관련 포스팅입니다. 이번에는 시계열 데이터나 순서가 중요한 데이터 분석에 유용한 LEAD()와 LAG() 함수의 차이에 대해 물어보는 질문에 대해 다뤄보겠습니다.

질문: LEAD()와 LAG() 함수의 차이를 설명하고, 실제 비즈니스 사례에서 이 두 함수를 어떻게 사용할 수 있는지 예를 들어 설명하세요.

LEAD() 함수는 현재 행의 다음 행의 값을 반환합니다. 이를 통해 현재 행을 기준으로 다음 행의 데이터를 조회할 수 있습니다.

LEAD(column_name, offset, default_value) OVER (PARTITION BY column_name ORDER BY column_name)
  • column_name: 다음 행의 값을 참조할 열
  • offset: 다음 행의 상대적 위치를 지정하는 정수 (기본값은 1)
  • default_value: 참조할 다음 행이 없을 때 반환할 기본값 (생략 가능)
  • PARTITION BY partition_column: 데이터를 그룹화할 열 (생략 가능)
  • ORDER BY order_column: 순서를 지정할 열 (필수)

LAG() 함수:

LAG() 함수는 현재 행의 이전 행의 값을 반환합니다. 이를 통해 현재 행을 기준으로 이전 행의 데이터를 조회할 수 있습니다.

LAG(column_name, offset, default_value) OVER (PARTITION BY column_name ORDER BY column_name)
  • column_name: 이전 행의 값을 참조할 열
  • offset: 이전 행의 상대적 위치를 지정하는 정수 (기본값은 1)
  • default_value: 참조할 이전 행이 없을 때 반환할 기본값 (생략 가능)
  • PARTITION BY partition_column: 데이터를 그룹화할 열 (생략 가능)
  • ORDER BY order_column: 순서를 지정할 열 (필수)

이 두 함수는 데이터 분석에서 시간 순서나 순차적으로 데이터의 변화를 비교할 때 매우 유용합니다.

■ 예제: 일별 매출 데이터 분석

어떤 회사에서 일별 매출 데이터를 분석하고 있습니다. 각 날짜별 매출 데이터가 있고, 전날과 다음날의 매출과 비교하여 매출 증감 추이를 파악하고자 합니다. 이 때 LAG()와 LEAD() 함수를 사용하여 전날 매출과 다음날 매출을 각각 조회할 수 있습니다.

전날 매출과 비교하여 매출 증감율을 계산하는 예제:

SELECT 
    sale_date,
    amount,
    LAG(amount, 1) OVER (ORDER BY sale_date) AS previous_amount,
    (amount - LAG(amount, 1) OVER (ORDER BY sale_date)) / LAG(amount, 1) OVER (ORDER BY sale_date) * 100 AS change_from_previous_day
FROM 
    dataset.sales;

다음날 매출과 비교하여 매출 증감율을 계산하는 예제:

SELECT 
    sale_date,
    amount,
    LEAD(amount, 1) OVER (ORDER BY sale_date) AS next_amount,
    (LEAD(amount, 1) OVER (ORDER BY sale_date) - amount) / amount * 100 AS change_to_next_day
FROM 
    dataset.sales;

sale_dateamountprevious_amountchange_from_previous_dainext_amountchange_to_next_amount
2023-07-01100nullnull15050.00
2023-07-0215010050.00%20033.33
2023-07-0320015033.33%25025.00
2023-07-0425020025.00%30020.00
2023-07-0530025020.00%nullnull

이 예제에서:

  • LAG() 함수는 현재 행의 이전 행의 amount 값을 반환하여 전날 매출과 비교할 수 있게 해줍니다.
  • LEAD() 함수는 현재 행의 다음 행의 amount 값을 반환하여 다음날 매출과 비교할 수 있게 해줍니다.

면접 시 다루는 방법

  1. 기본 개념 이해 확인: LEAD()와 LAG() 함수의 기본 정의와 차이점을 정확히 설명합니다.
  2. 구문 설명: 각 함수의 구문을 설명하고, offset과 default_value의 역할을 설명합니다.
  3. 실제 사례 적용: 비즈니스 문제에서 LEAD()와 LAG() 함수를 사용한 사례를 설명하고, 이를 통해 얻을 수 있는 인사이트를 강조합니다.
  4. 코드 예제: 직접 쿼리 예제를 작성하고, 예상 결과를 설명합니다.
  5. 추가 질문 대비: 왜 LEAD()와 LAG() 함수가 중요한지, 이 함수들을 사용함으로써 얻을 수 있는 장점과 단점을 설명할 준비를 합니다.