https://school.programmers.co.kr/learn/courses/30/lessons/293259

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

코드설명

IFNULL + AVG + ROUND 을 활용하여 구할 수 있습니다.

 

IFNULL 대신 COALESCE 를 활용해도 됩니다. COALESCE는 표준SQL 이라 조금 더 범용적입니다.

 

FISH_INFO 테이블의 LENGTH 필드의 평균을 계산하되, LENGTH가 NULL인 경우 이를 10으로 간주하고 평균 길이를 구한 뒤, 그 결과를 소수점 둘째 자리까지 반올림한 값을 AVERAGE_LENGTH로 반환합니다. 두 쿼리의 주요 차이점은 NULL 값을 처리하는 함수입니다.

 

  1. 첫 번째 쿼리: IFNULL(LENGTH, 10) 함수를 사용하여 LENGTH 필드가 NULL인 경우 10으로 대체합니다.
  2. 두 번째 쿼리: 표준 SQL에서 지원하는 COALESCE(LENGTH, 10) 함수를 사용하여 첫 번째 인자인 LENGTH가 NULL이 아닌 경우 그 값을, NULL인 경우 두 번째 인자인 10을 사용합니다.
  • 호환성: COALESCE는 ANSI SQL 표준의 일부이므로, 다양한 DBMS에서 더 넓은 호환성을 제공합니다. IFNULL은 MySQL과 같은 특정 DBMS에서 사용할 수 있는 함수입니다. 따라서, 이식성이 중요한 상황이라면 COALESCE를 사용하는 것이 더 좋습니다.
  • 유연성: COALESCE는 두 개 이상의 매개변수를 받을 수 있으며, 이는 첫 번째 NULL이 아닌 값을 반환합니다. 이는 IFNULL이 제공하지 않는 보다 큰 유연성을 제공합니다. 예를 들어, COALESCE(LENGTH, WIDTH, 10)와 같이 사용할 수 있습니다.

코드

IFNULL을 활용한코드입니다.

SELECT ROUND(AVG(IFNULL(LENGTH, 10)), 2) AS AVERAGE_LENGTH FROM FISH_INFO;

 

COALESCE를 활용한 ANSI SQL입니다.

SELECT ROUND(AVG(COALESCE(LENGTH, 10)), 2) AS AVERAGE_LENGTH FROM FISH_INFO;
-- 이 코드를 통해 AVG함수가 테이블의 레코드셋을 순회하면서 AVG를 계산한다는 것을 알 수 있습니다. RECORD SET을 모두돌면서 만약 LENGTH가 NULL이라면 10으로 바꾼다는 의미입니다.
SELECT ROUND(AVG(IFNULL(LENGTH, 10)), 2) AS AVERAGE_LENGTH
FROM FISH_INFO AS FI;

+ Recent posts