ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • mysql 기본 NULL 처리 함수들
    Programing Language/SQL 2025. 6. 17. 11:09
    반응형

    COALESCE (표준 SQL)

     
    sql
    COALESCE(col1, col2, '기본값')  -- 첫 번째 non-NULL 값 리턴
    COALESCE(amount, 0)            -- amount가 NULL이면 0

    IFNULL (MySQL 전용)

     
    sql
    IFNULL(amount, 0)              -- amount가 NULL이면 0
    IFNULL(customer_name, '미등록') -- NULL이면 '미등록'

    ISNULL / IS NULL

     
    sql
    -- 조건문에서
    WHERE amount IS NULL           -- NULL 체크
    WHERE amount IS NOT NULL       -- NOT NULL 체크
    SELECT ISNULL(amount)          -- NULL이면 1, 아니면 0

    2. 집계함수의 NULL 처리

    COUNT

     
    sql
    COUNT(*)                 -- 모든 행 (NULL 포함)
    COUNT(column)            -- NULL 제외
    COUNT(DISTINCT column)   -- 중복+NULL 제외

    SUM, AVG, MIN, MAX

     
    sql
    SUM(amount)              -- NULL 제외하고 합계
    AVG(amount)              -- NULL 제외하고 평균
    -- 결과가 NULL이면 COALESCE 사용
    COALESCE(SUM(amount), 0)

    3. 조건문에서 NULL 처리

    CASE WHEN

     
    sql
    CASE 
        WHEN amount IS NULL THEN 0
        WHEN amount > 1000 THEN 'high'
        ELSE 'low'
    END

    IF 함수 (MySQL 전용)

     
    sql
    IF(amount IS NULL, 0, amount)  -- NULL이면 0, 아니면 원값

    4. JOIN에서 NULL 처리

    LEFT JOIN 후 NULL 처리

     
    sql
    SELECT 
        a.customer_id,
        COALESCE(b.order_count, 0) as order_count
    FROM customers a
    LEFT JOIN order_summary b ON a.customer_id = b.customer_id

    5. 실무 패턴들

    WHERE 절 NULL 처리

     
    sql
    -- 안전한 비교
    WHERE COALESCE(amount, 0) > 100
    
    -- NULL 포함 검색
    WHERE name LIKE '%검색어%' OR name IS NULL

    GROUP BY NULL 처리

     
    sql
    GROUP BY COALESCE(category, 'uncategorized')

    ORDER BY NULL 처리

     
    sql
    ORDER BY COALESCE(order_date, '1900-01-01')  -- NULL을 맨 앞으로
    ORDER BY order_date IS NULL, order_date      -- NULL을 맨 뒤로

    6. 코테에서 자주 쓰는 패턴

     
    sql
    -- 매출 없는 고객도 0으로 표시
    SELECT 
        customer_id,
        COALESCE(SUM(amount), 0) as total_sales
    FROM orders
    GROUP BY customer_id
    
    -- 활동 없는 날도 0으로 표시  
    SELECT 
        activity_date,
        COALESCE(COUNT(DISTINCT user_id), 0) as active_users
    FROM calendar_dates
    LEFT JOIN user_activity USING(activity_date)
    GROUP BY activity_date

    핵심: COUNT는 자동 NULL 처리, 나머지는 COALESCE/IFNULL 사용! 👍

    반응형

    댓글

Designed by Tistory.