SQL에서 NULL이 포함된 레코드를 정확히 처리하는 방법: MAX/MIN 함수 활용법

SQL에서 데이터베이스를 다룰 때, NULL 값의 존재는 피할 수 없는 문제입니다. 특히 집계 함수인 MAX나 MIN을 사용할 경우, NULL 처리 방식은 매우 중요합니다. 본 기사에서는 NULL의 기본 개념부터 시작하여, SQL에서 NULL을 처리하는 방법, 그리고 NULL이 포함된 데이터셋에서 MAX 및 MIN 함수를 활용하는 방법에 대해 자세히 설명합니다. 이를 통해 데이터 분석 및 데이터베이스 관리의 정확도를 향상시킬 수 있습니다.

목차

NULL이란 무엇인가?

NULL은 데이터베이스에서 “값이 존재하지 않음”을 나타내는 특수한 마커입니다. NULL은 숫자 0이나 빈 문자열과는 다르게, “알 수 없음” 또는 “적용할 수 없음”이라는 의미를 가집니다. NULL의 존재는 데이터의 결손이나 미입력을 나타내며, 데이터베이스 내 일부 열이나 레코드에 값이 설정되지 않았음을 의미합니다.

SQL에서 NULL의 처리

SQL에서는 NULL을 특별한 값으로 취급하며, 많은 주의가 필요합니다. NULL은 등가 비교 연산자(= 및 <>)로 비교할 수 없으며, 특별한 조건식을 사용해야 합니다. 또한, 집계 함수나 산술 연산에서도 NULL이 포함된 경우 처리에 주의해야 합니다. 아래에서 SQL에서 NULL을 다룰 때의 기본적인 포인트를 설명합니다.

NULL 비교

NULL은 등가 비교 연산자로 직접 비교할 수 없습니다. NULL 비교에는 IS NULL이나 IS NOT NULL을 사용합니다. 예를 들어, 특정 열에 NULL이 포함된 레코드를 조회하려면 다음과 같이 합니다.

SELECT * FROM 테이블명 WHERE 열명 IS NULL;

NULL과 연산

NULL이 포함된 산술 연산은 결과가 NULL이 됩니다. 예를 들어, 숫자와 NULL을 더하면 결과는 NULL입니다. 이 특성을 이해하여, NULL이 포함된 계산이 의도한 결과를 낼 수 있도록 주의해야 합니다.

집계 함수에서의 NULL

집계 함수(SUM, AVG, MAX, MIN 등)는 NULL을 무시하고 계산을 수행합니다. 다만, NULL을 고려한 결과가 필요할 경우 적절한 처리가 필요합니다.

MAX/MIN 함수의 기본적인 사용법

MAX 및 MIN 함수는 지정한 열의 최대값 및 최솟값을 가져오기 위해 사용되는 SQL의 집계 함수입니다. 이러한 함수는 특정 열에서 최대값이나 최솟값을 찾는 데 유용합니다.

MAX 함수의 기본 구문

MAX 함수는 지정한 열의 최대값을 반환합니다. 기본적인 구문은 다음과 같습니다.

SELECT MAX(열명) FROM 테이블명;

예:

SELECT MAX(가격) FROM 상품;

이 쿼리는 “상품” 테이블에서 “가격” 열의 최대값을 반환합니다.

MIN 함수의 기본 구문

MIN 함수는 지정한 열의 최솟값을 반환합니다. 기본적인 구문은 다음과 같습니다.

SELECT MIN(열명) FROM 테이블명;

예:

SELECT MIN(가격) FROM 상품;

이 쿼리는 “상품” 테이블에서 “가격” 열의 최솟값을 반환합니다.

그룹화와 MAX/MIN

MAX/MIN 함수는 GROUP BY 절과 함께 사용되는 경우가 많으며, 특정 그룹 내에서 최대값이나 최솟값을 구할 수 있습니다.

SELECT 카테고리, MAX(가격) FROM 상품 GROUP BY 카테고리;

이 쿼리는 “상품” 테이블을 “카테고리”로 그룹화하여 각 카테고리 내 최대 가격을 반환합니다.

NULL이 포함된 데이터셋에서 MAX/MIN의 동작

MAX 및 MIN 함수는 NULL 값이 포함된 경우 어떻게 동작하는지 이해하는 것이 중요합니다. 이러한 함수는 NULL을 무시하고 계산을 수행합니다.

NULL이 포함된 경우 MAX 함수의 동작

MAX 함수는 NULL을 무시하고 최대값을 계산합니다. 예를 들어, 다음과 같은 데이터셋이 있다고 가정합니다.

SELECT * FROM 상품;
상품ID가격
1100
2NULL
3200
4150

이 경우, 다음 쿼리를 실행하면:

SELECT MAX(가격) FROM 상품;

결과는 200이 됩니다. NULL은 무시되고 존재하지 않는 값으로 처리됩니다.

NULL이 포함된 경우 MIN 함수의 동작

MIN 함수도 마찬가지로 NULL을 무시하고 최솟값을 계산합니다. 위의 데이터셋에서 다음 쿼리를 실행하면:

SELECT MIN(가격) FROM 상품;

결과는 100이 됩니다. NULL은 무시되고 존재하지 않는 값으로 처리됩니다.

구체적인 예

구체적으로, NULL이 포함된 경우의 동작을 확인하기 위해 다음과 같은 테이블을 준비합니다.

CREATE TABLE 샘플데이터 (  
    ID INT,  
    값 INT  
);  

INSERT INTO 샘플데이터 (ID, 값) VALUES (1, 10), (2, NULL), (3, 30), (4, 20);

이 데이터셋에서 다음 쿼리를 실행합니다.

SELECT MAX(값), MIN(값) FROM 샘플데이터;

결과는 다음과 같습니다.

MAX(값)MIN(값)
3010

이 예시에서도 알 수 있듯이, MAX 및 MIN 함수는 NULL을 무시하고 계산을 수행합니다.

NULL을 무시하는 방법

SQL에서 MAX나 MIN 함수를 사용할 때, NULL 값을 무시하고 계산을 수행하는 방법은 여러 가지가 있습니다. 이를 통해 NULL 값이 결과에 영향을 미치지 않도록 할 수 있습니다.

WHERE 절을 사용하여 NULL 필터링

쿼리 실행 전에 WHERE 절을 사용하여 NULL 값을 제외할 수 있습니다. 예를 들어, 다음과 같이 NULL 값을 포함하지 않은 레코드만을 대상으로 합니다.

SELECT MAX(값) FROM 샘플데이터 WHERE 값 IS NOT NULL;

이 쿼리는 NULL 값을 무시하고 최대값을 계산합니다.

IS NOT NULL 조건 활용

MIN 함수에서도 마찬가지로, WHERE 절을 사용하여 NULL 값을 제외할 수 있습니다.

SELECT MIN(값) FROM 샘플데이터 WHERE 값 IS NOT NULL;

이 쿼리를 통해 NULL 값을 무시하고 최솟값을 계산합니다.

NULL 값을 제외하는 다른 방법

경우에 따라서는 NULL 값을 제외하기 위해 서브쿼리를 사용할 수도 있습니다. 예를 들어, 다음과 같이 서브쿼리를 사용하여 NULL 값을 제외합니다.

SELECT MAX(값) FROM (SELECT 값 FROM 샘플데이터 WHERE 값 IS NOT NULL) AS 필터데이터;

이 쿼리는 NULL 값을 포함하지 않는 서브쿼리를 생성한 후 그 결과에서 최대값을 계산합니다.

NULL을 특정 값으로 대체하는 방법

SQL에서는 NULL 값을 특정 값으로 대체하기 위해 COALESCE 함수를 사용할 수 있습니다. 이를 통해 NULL이 포함된 경우에도 적절한 값을 사용하여 계산을 수행할 수 있습니다.

COALESCE 함수의 기본 구문

COALESCE 함수는 첫 번째로 NULL이 아닌 값을 반환하는 함수입니다. 기본 구문은 다음과 같습니다.

COALESCE(식1, 식2, ..., 식N)

이 구문에서는 식1에서 식N까지 중에서 첫 번째로 NULL이 아닌 값이 반환됩니다.

구체적인 예

예를 들어, NULL 값을 0으로 대체하는 경우는 다음과 같이 합니다.

SELECT COALESCE(값, 0) FROM 샘플데이터;

이 쿼리는 값이 NULL인 경우 0을 반환합니다.

NULL을 0으로 대체하여 최대값을 가져오기

SELECT MAX(COALESCE(값, 0)) FROM 샘플데이터;

이 쿼리는 NULL 값을 0으로 대체한 후 최대값을 가져옵니다.

NULL을 특정 문자열로 대체

문자열 열에 대해서도 마찬가지로, NULL을 특정 문자열로 대체할 수 있습니다.

SELECT COALESCE(이름, '알 수 없음') FROM 사용자;

이 쿼리는 이름이 NULL인 경우 ‘알 수 없음’이라는 문자열을 반환합니다.

여러 값을 지정하여 NULL 대체

COALESCE 함수는 여러 값을 순서대로 지정할 수 있으며, 첫 번째로 NULL이 아닌 값이 반환됩니다.

SELECT COALESCE(값1, 값2, 0) FROM 샘플데이터;

이 쿼리는 값1이 NULL인 경우 값2를 반환하고, 둘 다 NULL인 경우 0을 반환합니다.

실전 예제: NULL이 포함된 매출 데이터 처리

여기에서는 실제 매출 데이터를 사용하여, NULL이 포함된 경우 MAX 및 MIN 함수의 사용 방법을 구체적으로 보여줍니다.

샘플 데이터 생성

먼저, 매출 데이터를 포함한 테이블을 생성하고, 몇 가지 레코드를 삽입합니다.

CREATE TABLE 매출 (  
    상품ID INT,  
    매출금액 INT  
);  

INSERT INTO 매출 (상품ID, 매출금액) VALUES  
(1, 1000),  
(2, 1500),  
(3, NULL),  
(4, 2000),  
(5, NULL),  
(6, 2500);

이 테이블에는 매출금액이 NULL인 레코드가 포함되어 있습니다.

NULL을 무시한 최대값과 최솟값 구하기

매출금액이 NULL인 레코드를 무시하고 최대값과 최솟값을 구합니다.

SELECT MAX(매출금액) AS 최대매출, MIN(매출금액) AS 최소매출  
FROM 매출  
WHERE 매출금액 IS NOT NULL;

이 쿼리는 매출금액이 NULL이 아닌 레코드만을 대상으로 최대매출과 최소매출을 계산합니다.

결과

최대매출최소매출
25001000

NULL을 0으로 대체하여 최대값과 최솟값 구하기

매출금액이 NULL인 경우 0으로 간주하여 계산하려면 COALESCE 함수를 사용합니다.

SELECT MAX(COALESCE(매출금액, 0)) AS 최대매출, MIN(COALESCE(매출금액, 0)) AS 최소매출  
FROM 매출;

이 쿼리는 매출금액이 NULL인 경우 0을 사용하여 최대매출과 최소매출을 계산합니다.

결과

최대매출최소매출
25000

NULL을 특정 값으로 대체하여 계산

예를 들어, 매출금액이 NULL인 경우 평균 매출금액을 사용하려면 다음과 같이 합니다.

WITH 평균매출 AS (  
    SELECT AVG(매출금액) AS 평균금액  
    FROM 매출  
    WHERE 매출금액 IS NOT NULL  
)  
SELECT MAX(COALESCE(매출금액, (SELECT 평균금액 FROM 평균매출))) AS 최대매출,  
       MIN(COALESCE(매출금액, (SELECT 평균금액 FROM 평균매출))) AS 최소매출  
FROM 매출;

이 쿼리는 매출금액이 NULL인 경우 평균 매출금액을 사용하여 최대매출과 최소매출을 계산합니다.

응용 예제와 연습 문제

여기에서는 SQL에서 NULL이 포함된 데이터를 처리하는 방법에 대한 이해를 돕기 위해 몇 가지 응용 예제와 연습 문제를 제공합니다.

응용 예제 1: 매출 데이터의 월별 집계

NULL이 포함된 매출 데이터를 월별로 집계하고, 각 월의 최대매출과 최소매출을 계산합니다.

CREATE TABLE 월별매출 (  
    월 INT,  
    매출금액 INT  
);  

INSERT INTO 월별매출 (월, 매출금액) VALUES  
(1, 1000),  
(1, 1500),  
(1, NULL),  
(2, 2000),  
(2, NULL),  
(2, 2500);  

SELECT 월, MAX(COALESCE(매출금액, 0)) AS 최대매출, MIN(COALESCE(매출금액, 0)) AS 최소매출  
FROM 월별매출  
GROUP BY 월;

이 쿼리는 각 월의 매출금액이 NULL인 경우 0으로 간주하여 최대매출과 최소매출을 계산합니다.

응용 예제 2: 고객별 평균 구매 금액

고객별 평균 구매 금액을 계산하고, NULL을 특정 값으로 대체하는 방법을 보여줍니다.

CREATE TABLE 구매내역 (  
    고객ID INT,  
    구매금액 INT  
);  

INSERT INTO 구매내역 (고객ID, 구매금액) VALUES  
(1, 1000),  
(1, NULL),  
(2, 1500),  
(2, 2000),  
(3, NULL);  

WITH 고객별평균 AS (  
    SELECT 고객ID, AVG(COALESCE(구매금액, 0)) AS 평균구매금액  
    FROM 구매내역  
    GROUP BY 고객ID  
)  
SELECT 고객ID, 평균구매금액  
FROM 고객별평균;

이 쿼리는 각 고객의 구매금액이 NULL인 경우 0으로 간주하여 평균 구매 금액을 계산합니다.

연습 문제

  1. 다음 “주문” 테이블에서, 주문금액이 NULL인 경우 최소값을 100으로 설정하여 최대 주문금액과 최소 주문금액을 계산하십시오.
CREATE TABLE 주문 (  
    주문ID INT,  
    주문금액 INT  
);  

INSERT INTO 주문 (주문ID, 주문금액) VALUES  
(1, 500),  
(2, NULL),  
(3, 1500),  
(4, 2000),  
(5, NULL);  

-- 연습 쿼리를 여기에 작성하세요.
  1. 다음 “제품” 테이블에서, 재고수가 NULL인 경우 -1로 설정하여 각 제품 카테고리의 최대 재고수와 최소 재고수를 계산하십시오.
CREATE TABLE 제품 (  
    제품ID INT,  
    카테고리 VARCHAR(50),  
    재고수 INT  
);  

INSERT INTO 제품 (제품ID, 카테고리, 재고수) VALUES  
(1, 'A', 100),  
(2, 'A', NULL),  
(3, 'B', 200),  
(4, 'B', NULL),  
(5, 'C', 300);  

-- 연습 쿼리를 여기에 작성하세요.

요약

SQL에서 NULL이 포함된 데이터를 정확히 처리하는 것은 데이터베이스 작업의 기본 기술 중 하나입니다. 특히 MAX 및 MIN 함수를 사용할 때는 NULL 처리에 주의가 필요합니다. NULL을 무시하는 방법, 특정 값으로 대체하는 방법 등을 이해함으로써, 데이터 결손에 대처하면서도 정확한 집계 결과를 얻을 수 있습니다. 실전 예제와 연습 문제를 통해 이러한 기술을 응용할 수 있도록 하십시오. 이를 통해 데이터베이스 관리 및 데이터 분석의 정확도를 크게 향상시킬 수 있습니다.

목차