[MySQL] 데이터가 비어있을 경우

Lake·2024년 4월 17일
0

SQL

목록 보기
4/6
post-thumbnail

- 데이터가 비어있을 경우

1. 대체하기

  • NULL 사용하기
SELECT restaurant_name 
       , AVG(rating) AS "평균 평점"
       , AVG(IF(rating <> 'Not Given', rating, NULL)) AS "평균 평점2"
FROM food_orders fo 
GROUP BY restaurant_name;

AVG(IF(rating <> 'Not Given', rating, NULL))
-> AGV(rating)이 'Not Given'이 아니면, NULL(값이 없음)로 대체

예)
만약 사진과 같은 칼럼이 있을 경우

MySQL에서는 사용할 수 없는 값일 때 해당 값을 연산에서 **제외**하게 된다.
-> 0으로 간주

따라서, 평균을 (0 + 0 + 5 + 3 + 4 + 3) / 6으로 계산한다.

여기서 AVG(IF(rating <> 'Not Given', rating, NULL))을 사용할 경우 'Not Given'이 NULL로 대체되므로,

평균을 (5 + 3 + 4 + 3) / 4로 계산한다.

무조건 NULL값을 제거하는 것 만이 능사가 아니며,
상황에 따라서 다르게 적용한다.

  • 조건문 이용하기
    예)
    IF(rating >= 1, rating, 대체값)

  • COALESCE() 함수 사용하기
    COALESCE는 아래와 같은 뜻을 가졌다.(CO · ALESCE로 나눠 읽는다)

SQL에서는

SELECT 컬럼1, 컬럼2, COALESCE(컬럼1, 컬럼2)

와 같이 사용하며, 주어진 컬럼들 중에서(왼쪽에서 오른쪽으로 순차적으로 확인했을 때) 가장 먼저 발견된 NULL이 아닌 값을 반환한다.

그러니까,

컬럼1의 n번째 ROW가 NULL -> n번째 줄에 있는 컬럼2의 값으로 대체
컬럼2의 n번째 ROW이 NULL -> n번째 줄에 있는 컬럼1의 값으로 대체
두 값 모두 NOT NULL이면 -> 컬럼1의 값 반환
두 값 모두 NULL -> NULL 반환

또는, 다음과 같이도 사용할 수 있다

SELECT COALESCE(컬럼1, 대체하고 싶은 값)

이렇게 적용해 주면 컬럼1에 있는 모든 NULL값을 대체하고 싶은 값으로 바꿔 준다.

2. 제거하기

  • WHERE 컬럼명 IS NOT NULL 사용 (JOIN 시에는 INNER JOIN 과 동일함)

오늘의 TMI
드디어 노트북이 왔다...!


판이 너무 커져서 원래 사려 했던 노트북보다 스펙 2번이나 높여서 받게 됐다. 받는 입장인 데다가 잘못하면 뒷일 감당 안 될것 같아서 적당히 하려고 했다. 근데 이게 왠걸, 보태보태병 + 임직원가니까 FLEX 해도 된다 + 어른이 주는건데 받아라 콤보에 당해버림.

원래 사려 했던 노트북도 꽤 성능 좋은 노트북이었던 데다가, 내가 노트북으로 게임을 돌리는 것도 아니고 3D프로그램이나 언리얼 엔진 같은 프로그램 돌리는 것도 아니고, 하다못해 포토샵이나 베가스 같은 프로그램 조차도 안쓰는데 이거 너무 과한것 같다.... 고 어필해 보았으나 돌아온 말은 '어차피 결제는 네가 하는거 아니니까 그냥 받아'ㅋㅋㅋㅋ
좋은데 안 좋아... 이거 다 내 미래 빚이잖아.........
시중가 250만원 - 300만원 하는 노트북인데 거의 신줏단지 아니냐고;;
진짜 내 돈으로 산 것도 아닌데 과소비 하는 기분...

하지만 주변에서 다들 그냥 해줄 때, 받을 수 있을 때 제일 좋은 걸로 뻔뻔하게 받는게 최고라고 해서 나도 마지막이니까 그냥 큰맘 먹고 받음. 아무튼 쉽지 않아,,,,

0개의 댓글