데이터 분석가(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_date | amount | previous_amount | change_from_previous_dai | next_amount | change_to_next_amount |
---|---|---|---|---|---|
2023-07-01 | 100 | null | null | 150 | 50.00 |
2023-07-02 | 150 | 100 | 50.00% | 200 | 33.33 |
2023-07-03 | 200 | 150 | 33.33% | 250 | 25.00 |
2023-07-04 | 250 | 200 | 25.00% | 300 | 20.00 |
2023-07-05 | 300 | 250 | 20.00% | null | null |
이 예제에서:
LAG()
함수는 현재 행의 이전 행의amount
값을 반환하여 전날 매출과 비교할 수 있게 해줍니다.LEAD()
함수는 현재 행의 다음 행의amount
값을 반환하여 다음날 매출과 비교할 수 있게 해줍니다.
면접 시 다루는 방법
- 기본 개념 이해 확인: LEAD()와 LAG() 함수의 기본 정의와 차이점을 정확히 설명합니다.
- 구문 설명: 각 함수의 구문을 설명하고, offset과 default_value의 역할을 설명합니다.
- 실제 사례 적용: 비즈니스 문제에서 LEAD()와 LAG() 함수를 사용한 사례를 설명하고, 이를 통해 얻을 수 있는 인사이트를 강조합니다.
- 코드 예제: 직접 쿼리 예제를 작성하고, 예상 결과를 설명합니다.
- 추가 질문 대비: 왜 LEAD()와 LAG() 함수가 중요한지, 이 함수들을 사용함으로써 얻을 수 있는 장점과 단점을 설명할 준비를 합니다.