[SQL] coalesce()

myminimin·2023년 9월 19일
0

라는 말이 있기 때문에 약간 의심을 하고 있었는데 역시나 리뷰가 NULL 값일 경우를 생각해서 @Query가 작성이 되어있었다!

리뷰의 개수와 리뷰의 평균 평점을 구하는 실습 중 @Query를 이용해서 평균을 구할 때 단순히 avg만 사용하는 것이 아니라 avg(coalesce(r.grade, 0)) 이렇게 평균값을 구했다.

coalesce()는 초면이라 궁금해져서 검색을 해봤다 🤔


만약 데이터가 없는 상태로 AVG 같은 연산식을 이용하게 되면 오류가 나거나 결과값이 크게 차이가 날 수 있기 때문에

coalesce() 를 이용해서 특정 열의 값이 NULL일 경우 적절한 값으로 치환해서 사용하는 것이다!
(정확히는 첫 번째 인자부터 차례대로 확인한 후, 처음으로 NULL이 아닌 값을 만나면 그 값을 리턴시키는 함수이다.)

@Query("SELECT m, avg(coalesce(r.grade,0)), count(distinct r) FROM Movie m LEFT OUTER JOIN Review r ON r.movie = m GROUP BY m")

예제와 같이 사용한다면 coalesce(r.grade,0) 에서

r.grade 필드에 값이 있을 경우에는 r.grade의 데이터를 리턴하고

NULL이면 0을 리턴한다는 뜻이다!


  • COALESCE 문법
SELECT COALESCE(컬럼1, 컬럼2, ... , 컬럼N)
FROM [테이블]

컬럼1이 NULL이 아니면 컬럼1을 리턴
컬럼1이 NULL이고 컬럼2가 NULL이 아니면 컬럼2를 리턴
컬럼1부터 컬럼n-1까지 데이터가 NULL이면 컬럼N값을 리턴

NVL도 첫 번째 인자가 NULL이면 두 번째 인자를 리턴하는 함수인데 NVL은 인자를 두 개만 받을 수 있는 반면에 COALESCE는 여러 개의 인자를 받을 수 있다.


0개의 댓글