2024. 9. 24. 18:00ㆍSQL 고득점 Kit/IS NULL
https://school.programmers.co.kr/learn/courses/30/lessons/293259
문제 설명
낚시앱에서 사용하는 FISH_INFO 테이블은 잡은 물고기들의 정보를 담고 있습니다.
FISH_INFO 테이블의 구조는 다음과 같으며 ID, FISH_TYPE, LENGTH, TIME은 각각 잡은 물고기의 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로 에일리어싱을 해주면, 문제를 풀 수 있습니다.
'SQL 고득점 Kit > IS NULL' 카테고리의 다른 글
[IS NULL] 업그레이드 할 수 없는 아이템 구하기 (2) | 2024.09.23 |
---|---|
[IS NULL] ROOT 아이템 구하기 (4) | 2024.09.22 |
[IS NULL] 나이 정보가 없는 회원 수 구하기 (0) | 2024.09.20 |
[IS NULL] NULL 처리하기 (0) | 2024.09.17 |
[IS NULL] 이름이 있는 동물의 아이디 (0) | 2024.09.16 |