하파와 데이터

SQL- Null 에 따른 AVG 값의 차이 본문

Development/SQL

SQL- Null 에 따른 AVG 값의 차이

hhpp 2023. 7. 22. 02:42

SQL에서 마주하는 데이터셋에는 NULL이 있는경우와 없는 경우가 있을 것이다. 

사실 인위적인 데이터가 아니고서야 NULL이 없는 데이터가 없을 것이라고 예상이된다. 

 

데이터를 분석하는 측면에서는 수집되지 않은 데이터를 어떻게 처리할 것인지 0으로 처리할 것인지 

또는 아예 그 데이터셋 자체를 삭제하고 데이터를 분석할 것인지 등을 고민해야할텐데 

그를 위해선, SQL에서 집계함수를 사용할때 어떤 방법을 사용했을때 NULL을 무시할 수 있는지 

또는 NULL을 0처럼 인식해서 값을 얻을 수 있는지 알아야하겠다. 

 

예시 데이터

참조: w3school의 Products 테이블을 재가공하여 사용

 

집계함수

SQL에서 숫자형 데이터를 분석해주는 다양한 집계함수들을 볼 수 있다.

COUNT(*) - 데이터의 갯수를 출력

SUM(*) - 데이터 값의 합계를 출력

AVG(*) - 데이터 값의 평균을 출력

MIN(*) -  데이터 값 중 최소값을 출력

MAX(*) - 데이터 값 중 최대값을 출력

다만 여기서 주의할 것은 '*'를 사용해서 구하는 값들은 NULL의 데이터 역시 포함해서 값을 출력한다는 것이다. 

예를들어, COUNT(*)의 값과 COUNT(SupplierID)의 값은 다르다.

SELECT COUNT(*)
FROM Products
5

SELECT COUNT(SupplierID)
FORM Products
4

 

이러한 것을 고려했을때, 주요하게 달라지는 것이 바로 평균 값(AVG)이다. 

SELECT AVG(Price)
FROM Products
15.67

SELECT SUM(Price)/COUNT(*)
FROM Products
11.75

총합을 더해서 총갯수로 나누는 의미의 행위는 같지만,

AVG(Price)와 SUM(Price)/COUNT(*)의 출력값은 상이하다.

 

AVG(Price)는 18+19+10 /3(null값을 제외했기에)

SUM(Price)/COUNT(*)는 18+19+10/4(null도 포함하기에)

 

데이터분석가가 어떠한 의도로 평균을 얻어내고자 하는지에 따라 

AVG 함수를 사용할지, SUM/COUNT(*)를 사용할지 구분해야한다. 

'Development > SQL' 카테고리의 다른 글

[SQL이론] DATE 형태 변형, 일자 변경  (0) 2023.08.08
[SQL 이론] 숫자형, 문자형 기본함수  (0) 2023.08.07
SQL - PIVOT 변환하기  (0) 2023.07.31
SQL 소수점 처리  (0) 2023.07.22