https://school.programmers.co.kr/learn/courses/30/lessons/293259
코드설명
IFNULL + AVG + ROUND 을 활용하여 구할 수 있습니다.
IFNULL 대신 COALESCE 를 활용해도 됩니다. COALESCE는 표준SQL 이라 조금 더 범용적입니다.
FISH_INFO 테이블의 LENGTH 필드의 평균을 계산하되, LENGTH가 NULL인 경우 이를 10으로 간주하고 평균 길이를 구한 뒤, 그 결과를 소수점 둘째 자리까지 반올림한 값을 AVERAGE_LENGTH로 반환합니다. 두 쿼리의 주요 차이점은 NULL 값을 처리하는 함수입니다.
- 첫 번째 쿼리: IFNULL(LENGTH, 10) 함수를 사용하여 LENGTH 필드가 NULL인 경우 10으로 대체합니다.
- 두 번째 쿼리: 표준 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;
'SQL > 프로그래머스' 카테고리의 다른 글
[SQL][프로그래머스] Python 개발자 찾기 - IN + OR + ORDER BY Mysql (0) | 2024.03.25 |
---|---|
[SQL][프로그래머스] 잔챙이 잡은 수 구하기 - ISNULL + IS NULL + COUNT Mysql (0) | 2024.03.25 |
[SQL][프로그래머스] 잡은 물고기 중 가장 큰 물고기의 길이 구하기 - MAX + CONCAT Mysql (0) | 2024.03.25 |
[SQL][프로그래머스] 한 해에 잡은 물고기 수 구하기- SELECT + ORDER BY + LIMIT Mysql (0) | 2024.03.25 |
[SQL][프로그래머스] 가장 큰 물고기 10마리 구하기- SELECT + ORDER BY + LIMIT Mysql (0) | 2024.03.25 |