본문 바로가기
내일배움캠프 AI 웹 프로그래밍

내일배움캠프 73일차_SQL 예상못한 데이터 값

by thriveview 2023. 11. 6.

SQL 마지막 5주차 학습목표:

  • 데이터에서 예상하지 못한 값이 나왔을 때 (이상한 값, 값이 없음 등), 분석에 적절하에 처리한다
  • SQL 로 엑셀에서 자주 사용하는 형태로 데이터를 만든다
  • 업무에 활용할 수 있는 다양한 SQL 심화 문법을 익힌

 

Subquery, Join 복습

#Subquery: Query 결과를 Query 에 다시 활용하는 것
#기본 형식
select column1, special_column
from
    ( /* subquery */
    select column1, column2 special_column
    from table1
    ) a
    

#join: 두 개 이상의 테이블 결합시 사용. 형태에 따라 Left join, inner join 등등
#기본 형식
-- LEFT JOIN
select 조회 할 컬럼
from 테이블1 a left join 테이블2 b on a.공통컬럼명=b.공통컬럼명

-- INNER JOIN
select 조회 할 컬럼
from 테이블1 a inner join 테이블2 b on a.공통컬럼명=b.공통컬럼명

 

 

조회한 데이터에서 아무 값도 없다면?!

테이블에 잘못된 값이 들어있을 수 있다. 사용할 수 없는 데이터가 있거나 없는 경우는 흔한 편이다.

 

방법 1. 없는 값을 제외해주기 

#Mysql 에서는 사용할 수 없는 값일 때 해당 값을 연산에서 제외해줍니다. → 0으로 간주
#즉 평균 rating 을 구하는 쿼리를 아래와 같이 작성했을 때 실제 연산에 사용되는 데이터는 다음과 같습니다.

select restaurant_name,
       avg(rating) average_of_rating,
       avg(if(rating<>'Not given', rating, null)) average_of_rating2
from food_orders
group by 1

 

스파르타 코딩클럽

 

따라서, 명확하게 연산을 지정해주기 위해 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

 

 

다른 케이스로, 만약 조회한 데이터가 상식적이지 않은 값일때는?

이러한 경우에는 조건문으로 값의 범위를 지정해볼 수 있다. 

조건문으로 가장 큰 값, 가장 작은 값의 범위를 지정해 주면된다. (상식적인 수준 안에서 지정해야함)