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(값이 없음)로 대체
예)
만약 사진과 같은 칼럼이 있을 경우
따라서, 평균을 (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값을 대체하고 싶은 값으로 바꿔 준다.
오늘의 TMI
드디어 노트북이 왔다...!
판이 너무 커져서 원래 사려 했던 노트북보다 스펙 2번이나 높여서 받게 됐다. 받는 입장인 데다가 잘못하면 뒷일 감당 안 될것 같아서 적당히 하려고 했다. 근데 이게 왠걸, 보태보태병 + 임직원가니까 FLEX 해도 된다 + 어른이 주는건데 받아라 콤보에 당해버림.
원래 사려 했던 노트북도 꽤 성능 좋은 노트북이었던 데다가, 내가 노트북으로 게임을 돌리는 것도 아니고 3D프로그램이나 언리얼 엔진 같은 프로그램 돌리는 것도 아니고, 하다못해 포토샵이나 베가스 같은 프로그램 조차도 안쓰는데 이거 너무 과한것 같다.... 고 어필해 보았으나 돌아온 말은 '어차피 결제는 네가 하는거 아니니까 그냥 받아'ㅋㅋㅋㅋ
좋은데 안 좋아... 이거 다 내 미래 빚이잖아.........
시중가 250만원 - 300만원 하는 노트북인데 거의 신줏단지 아니냐고;;
진짜 내 돈으로 산 것도 아닌데 과소비 하는 기분...
하지만 주변에서 다들 그냥 해줄 때, 받을 수 있을 때 제일 좋은 걸로 뻔뻔하게 받는게 최고라고 해서 나도 마지막이니까 그냥 큰맘 먹고 받음. 아무튼 쉽지 않아,,,,