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

댓글