SQL | 데이터 정리(없는 데이터, 사용할 수 없는 데이터)

    728x90

     

    1. NULL값 정리 방법

     

    1-1) 제외시키기

     

    문제) 평균 rating 구하기

     

    ▶ 원본 데이터의 rating 컬럼 값에 'Not given'이라는 값이 있음

     

     

    ▶ [MySQL] 사용할 수 없는 값은 알아서 연산에서 제외해줌 → 0으로 간주함

    : 연산에 사용된 데이터는 'Not given'을 제외한 데이터

    SELECT restaurant_name,
           AVG(rating) avg_rating,
           AVG(IF(rating<>'Not given', rating, NULL)) avg_rating2
    FROM food_orders
    Group By 1

     

     

    ▶ NULL 제거

    - NULL 제거 이전 데이터 상태

     

     

    - NULL 제거 이후 데이터 상태

    : JOIN 중 INNER JOIN 한 효과와 동일한 상태가 됨

    : WHERE절에서 IS NOT NULL 사용 (즉, NULL이 아닌 데이터만 조회되도록 함) 

    ※ NULL 의 경우 != NULL 이나 <> NULL 이런 게 아니라 IS NOT NULL을 사용함.

    SELECT a.order_id,
           a.customer_id,
           a.restaurant_name,
           a.price,
           b.name,
           b.age,
           b.gender
    FROM food_orders a 
    LEFT JOIN customers b ON a.customer_id=b.customer_id
    WHERE b.customer_id IS NOT NULL

     


    1-2) 다른 값으로 대체하기

    ▶ 조건문 이용하기: IF문 사용

    ▶ NULL값일 때: COALESCE 함수 사용하기

     

    [COALESCE 함수_참고 게시글]

    https://velog.io/@gooook/SQL-COALESCE

     

    [SQL] COALESCE

    coalesce 함수를 이용해서 NULL 값 다루기

    velog.io

    SELECT a.order_id,
           a.customer_id,
           a.restaurant_name,
           a.price,
           b.name,
           b.age,
           coalesce(b.age, 20) "age_null제거",
           b.gender
    FROM food_orders a 
    LEFT JOIN customers b ON a.customer_id=b.customer_id
    WHERE b.age is null

     


    번외) 상식적이지 않은 값이 있는 데이터

    조건문을 이용해 값의 범위를 지정해줄 수 있음

    BETWEEN ~ AND 등으로 범위 지정 가능!

    728x90

    댓글