NULL 값과 집계 함수의 관계 무시
데이터 분석의 함정인 NULL 값과 집계 함수의 관계
데이터를 다루는 업무를 하다 보면 가장 당혹스러운 순간 중 하나는 분명히 데이터가 존재함에도 불구하고 통계 수치가 예상과 다르게 나올 때입니다. 특히 SQL이나 엑셀과 같은 도구에서 평균을 구하거나 합계를 낼 때 발생하는 NULL 값의 처리는 초보자부터 숙련자까지 모두가 한 번쯤 겪는 난관입니다. NULL은 단순히 ‘0’이나 ‘공백’이 아니라 ‘알 수 없는 값’ 혹은 ‘값이 존재하지 않음’을 의미합니다. 이 특성을 이해하지 못하면 데이터 분석 결과에 심각한 왜곡이 발생할 수 있습니다.
NULL 값의 본질적인 의미 이해하기
많은 사람이 NULL을 0과 혼동합니다. 하지만 데이터베이스 설계 관점에서 0은 명확한 수치 값입니다. 반면 NULL은 정보가 입력되지 않았거나, 대상이 해당하지 않거나, 아직 상태를 알 수 없는 미지의 상태입니다. 예를 들어 고객의 연간 구매액을 집계할 때, 구매 이력이 없는 고객의 데이터가 0으로 기록되어 있다면 이는 ‘구매액이 없음’을 의미하지만, NULL로 기록되어 있다면 ‘정보가 수집되지 않았음’을 의미합니다. 이 미세한 차이가 집계 함수를 만났을 때 완전히 다른 결과를 만들어냅니다.
집계 함수가 NULL을 처리하는 방식
대부분의 현대적인 데이터베이스 시스템에서 집계 함수는 매우 일관된 규칙을 따릅니다. 가장 중요한 규칙은 바로 ‘NULL 값을 무시한다’는 점입니다. 이를 구체적으로 살펴보면 다음과 같습니다.
- COUNT() 함수는 NULL 여부와 상관없이 테이블의 모든 행을 카운트합니다.
- COUNT(컬럼명) 함수는 해당 컬럼이 NULL인 행을 제외하고 카운트합니다.
- SUM, AVG, MIN, MAX 함수는 계산 과정에서 모든 NULL 값을 무시합니다.
이 규칙이 왜 위험한지 실례를 들어보겠습니다. 만약 5명의 학생 점수가 80, 90, NULL, 70, NULL이라고 가정해 봅시다. 이들의 평균 점수를 구할 때 AVG 함수는 NULL인 두 명을 제외하고 80, 90, 70의 합인 240을 3으로 나누어 80점이라는 결과를 도출합니다. 하지만 실제로는 5명의 학생 전체에 대한 성적을 평가해야 하므로, NULL을 0으로 간주하여 240을 5로 나누어 48점이 나와야 할 수도 있습니다. 이처럼 집계 함수가 알아서 NULL을 무시하는 기능은 편리하지만, 비즈니스 로직에 따라서는 치명적인 오류를 범하게 만듭니다.
데이터 분석 시 흔히 발생하는 오해
데이터 분석 현장에서 가장 흔하게 발생하는 오해는 NULL을 포함한 행도 집계에 포함될 것이라 믿는 것입니다. 다음은 대표적인 오해와 사실 관계입니다.
- 오해: AVG 함수를 사용하면 전체 행의 개수를 분모로 삼을 것이다.
- 사실: AVG는 NULL을 제외한 행의 개수만을 분모로 삼습니다.
- 오해: NULL과 0을 더하면 0이 될 것이다.
- 사실: NULL과의 모든 산술 연산 결과는 NULL입니다. (NULL + 10 = NULL)
- 오해: COUNT(컬럼명)과 COUNT()는 같은 결과를 낼 것이다.
- 사실: NULL 값이 포함된 컬럼을 지정하면 COUNT(컬럼명)은 더 적은 숫자를 반환합니다.
실무에서 활용하는 NULL 처리 전략
데이터의 정확성을 보장하기 위해서는 집계 함수를 사용하기 전에 NULL 값을 어떻게 처리할지 명확한 전략이 필요합니다. 가장 많이 사용하는 방법은 COALESCE 함수나 IFNULL 함수를 사용하여 NULL을 특정 값(주로 0)으로 치환하는 것입니다.
NULL을 0으로 치환하여 계산하기
SQL에서는 COALESCE(컬럼명, 0)을 사용합니다. 예를 들어 매출 데이터를 집계할 때 NULL 값을 0으로 변환한 뒤 SUM을 수행하면, 정보가 없는 데이터를 0으로 처리하여 전체적인 통계를 정확하게 산출할 수 있습니다. 이는 특히 재무 지표나 성과 지표를 계산할 때 필수적인 절차입니다.
비율 계산 시 주의사항
비율을 계산할 때는 특히 더 신중해야 합니다. 분모에 들어가는 값이 NULL일 경우 전체 연산이 NULL이 될 수 있습니다. 이럴 때는 NULLIF 함수를 사용하여 특정 조건에서 NULL이 발생하지 않도록 제어하거나, 분모가 0이 되는 상황을 사전에 방지하는 로직을 추가해야 합니다.
전문가의 조언: 데이터 설계와 습관
데이터 분석 전문가들은 데이터가 들어오는 단계에서의 ‘데이터 품질 관리’를 강조합니다. 집계 함수에서 NULL을 어떻게 처리할지 고민하는 것보다 더 중요한 것은, 왜 해당 데이터가 NULL로 남게 되었는지를 파악하는 것입니다.
데이터를 수집하는 애플리케이션 단계에서 필수 입력값을 설정하거나, 기본값을 지정하는 것만으로도 나중에 데이터 분석 단계에서 겪을 수 있는 수많은 오류를 예방할 수 있습니다. 또한, 보고서를 작성할 때는 반드시 ‘NULL 값을 어떻게 처리했는지’에 대한 주석을 달아야 합니다. 예를 들어 “본 보고서의 평균값은 데이터가 누락된 항목을 제외하고 계산되었습니다”와 같은 안내는 데이터의 신뢰도를 높이는 데 큰 역할을 합니다.
자주 묻는 질문과 답변
질문: 모든 집계 함수가 NULL을 무시하나요?
답변: 거의 모든 표준 집계 함수는 NULL을 무시합니다. 하지만 COUNT(*)와 같이 행의 개수 자체를 세는 함수는 NULL 여부와 관계없이 전체 행을 대상으로 작동하므로 주의가 필요합니다.
질문: SUM 함수로 NULL을 더하면 왜 0이 되지 않나요?
답변: 수학적으로 NULL은 ‘값이 없음’을 의미하므로, 연산이 불가능한 상태입니다. 따라서 NULL을 0으로 명시적으로 변환하지 않으면 시스템은 연산 결과를 NULL로 처리합니다.
질문: 데이터 분석 도구마다 NULL 처리 방식이 다른가요?
답변: 기본 원칙은 비슷하지만, 엑셀과 같은 스프레드시트 도구와 SQL 데이터베이스, 그리고 파이썬의 판다스(Pandas) 라이브러리는 NULL(또는 NaN)을 처리하는 미세한 방식이 다를 수 있습니다. 따라서 사용하는 도구의 공식 문서를 확인하는 것이 좋습니다.
비용 효율적인 데이터 분석을 위한 팁
데이터 분석 과정에서 NULL 처리를 위해 너무 많은 리소스를 낭비하지 않으려면 단계별 접근이 필요합니다.
첫째, 데이터를 추출하는 시점에 필요한 필드만 NULL 처리를 수행합니다. 모든 데이터를 미리 정제하는 것은 엄청난 비용과 시간이 소요됩니다.
둘째, 데이터 시각화 도구(BI 툴) 내장 기능을 적극 활용합니다. 태블로(Tableau)나 파워 BI(Power BI) 같은 도구들은 데이터 원본을 건드리지 않고도 대시보드 내에서 NULL을 0으로 표시하거나 특정 값으로 바꾸는 기능을 제공합니다. 이를 활용하면 원본 데이터의 무결성을 유지하면서도 원하는 통계 수치를 얻을 수 있습니다.
셋째, 데이터 사전(Data Dictionary)을 구축하세요. 어떤 컬럼이 NULL을 허용하는지, NULL의 의미가 무엇인지 정의해두면 분석가들이 매번 고민할 필요가 없어 업무 효율이 비약적으로 상승합니다.
데이터 분석의 신뢰도를 높이는 습관
집계 함수와 NULL의 관계를 이해하는 것은 단순히 기술적인 지식을 넘어 데이터 분석가로서의 ‘태도’와 직결됩니다. 데이터에 담긴 숫자를 무비판적으로 받아들이지 않고, 그 이면에 숨겨진 빈칸(NULL)의 의미를 고민하는 과정이 포함되어야 합니다. NULL은 단순히 없애야 할 대상이 아니라, 데이터가 생성되는 과정에서 발생한 중요한 신호일 수 있습니다.
데이터를 집계할 때 “이 집계 결과에 NULL이 포함되어 있는가?”, “내가 사용한 함수가 NULL을 어떻게 처리하고 있는가?”라는 두 가지 질문을 스스로에게 던져보세요. 이 질문을 습관화하는 것만으로도 당신의 데이터 분석 결과는 훨씬 더 정확해지고, 동료들에게 더 큰 신뢰를 얻을 수 있을 것입니다. 데이터는 거짓말을 하지 않지만, 그 데이터를 다루는 방식에 따라 잘못된 결론을 유도할 수 있다는 점을 항상 기억하시기 바랍니다.
ace


댓글 0
첫 댓글을 남겨보세요.