https://school.programmers.co.kr/learn/courses/30/lessons/298519
코드설명
COALESCE + GROUP BY + COUNT +MAX + AVG 를 활용합니다.
이 문제에서 가장 중요한점은 COALESCE 입니다. DB에서 아마 많은 부분들이 NULL값으로 되어있는 부분들이 있습니다.
이러한 NULL의 연산은 오직, NULL 이냐 IS NOT NULL 으로만 연산이 가능합니다.
그러므로 만약 NULL일경우 원하는 형식으로 표현하기 위해서는 COALESCE 를 활용하여, 만약 NULL이라면 다른 파라미터에 존재하는 값을 사용하도록 합니다. COALESCE(LENGTH, 10) 이라면, LENGTH 가 NULL이라면 10을 반환하라는 의미입니다.
또, 이 문제를 통해서 COALESCE를 통해 AVG와 MAX가 LENGTH 속성의 레코드들을 모두 접근할때 COALESCE가 실행된다는걸 알 수 있습니다.(레코드 기반으로 직접 연산한다는 의미입니다.)
코드
SELECT COUNT(*) AS FISH_COUNT, MAX(COALESCE(LENGTH, 10)) AS MAX_LENGTH, FISH_TYPE AS FISH_TYPE
FROM FISH_INFO
GROUP BY FISH_TYPE
HAVING AVG(COALESCE(LENGTH, 10)) >= 33
ORDER BY FISH_TYPE ASC