[IS NULL] 잡은 물고기의 평균 길이 구하기

2024. 9. 24. 18:00SQL 고득점 Kit/IS NULL

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

 

프로그래머스

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

programmers.co.kr


문제 설명
낚시앱에서 사용하는 FISH_INFO 테이블은 잡은 물고기들의 정보를 담고 있습니다.

FISH_INFO 테이블의 구조는 다음과 같으며 IDFISH_TYPELENGTHTIME은 각각 잡은 물고기의 ID, 물고기의 종류(숫자), 잡은 물고기의 길이(cm), 물고기를 잡은 날짜를 나타냅니다.

Column name Type Nullable
ID INTEGER FALSE
FISH_TYPE INTEGER FALSE
LENGTH FLOAT TRUE
TIME DATE FALSE


단, 잡은 물고기의 길이가 10cm 이하일 경우에는 LENGTH 가 NULL 이며, LENGTH 에 NULL 만 있는 경우는 없습니다.


문제
잡은 물고기의 평균 길이를 출력하는 SQL문을 작성해주세요.

  • 평균 길이를 나타내는 컬럼 명은 AVERAGE_LENGTH로 해주세요.
  • 평균 길이는 소수점 3째자리에서 반올림하며, 10cm 이하의 물고기들은 10cm 로 취급하여 평균 길이를 구해주세요.

예시
예를 들어 FISH_INFO 테이블이 다음과 같다면

ID FISH_TYPE LENGTH TIME
0 0 30 2021/12/04
1 0 50 2020/03/07
2 0 40 2020/03/07
3 1 20 2022/03/09
4 1 NULL 2022/04/08
5 2 NULL 2021/04/28


10cm 이하의 물고기는 10cm 로 취급하므로 총 물고기의 길이의 합은 30 + 50 + 40 + 20 + 10 +10 = 160 이며 총 물고기의 수는 6마리이므로 잡은 물고기의 평균 길이는 160/6 = 26.666.. 입니다. 이를 소수점 3째자리에서 반올림하면 26.67 이므로 결과는 다음과 같아야 합니다.

AVERAGE_LENGTH
26.67

물고기들의 평균 길이를 구하는 문제입니다.

 

이 문제에서는 10cm 이하의 물고기들은 모두 NULL로 기록되어 있는데, 계산 시에는 이 값을 10cm로 간주하고 평균을 출력해야 합니다. 따라서 NULL일 때의 값을 어떻게 처리하는지 묻는 문제라고 할 수 있습니다.

 

문제를 푸는 방법이 여러 가지가 있습니다.

CASE WHEN을 사용해 NULL 값을 10으로 치환한 뒤, 서브쿼리로 사용해서 평균을 구할 수도 있습니다.

혹은 COALESCE를 사용해 NULL 값인 LENGTH를 전부 10으로 취급하도록 할 수도 있죠.

 

저는 COALESCE를 사용해 정답 코드를 작성해보겠습니다.

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

 

COALESCE 함수를 사용해 LENGTH가 NULL이라면 다음 식인 10으로 처리하도록 했습니다.

그 다음, 모든 LENGTH에 대해서 평균을 구하고, 그 평균을 ROUND 함수로 소수점 셋째 자리에서 반올림하도록 했습니다.

마지막으로 AVERAGE_LENGTH로 에일리어싱을 해주면, 문제를 풀 수 있습니다.