Algorithm/Programmers SQL

[MySQL] 프로그래머스 잡은 물고기의 평균 길이 구하기

제우제우 2024. 8. 28. 14:43

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

 

프로그래머스

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

programmers.co.kr

코딩테스트 연습 > IS NULL > 잡은 물고기의 평균 길이 구하기

 

문제 분석

잡은 물고기의 평균 길이를 출력하는 SQL문을 작성

평균 길이를 나타내는 컬럼 명은 AVERAGE_LENGTH 

평균 길이는 소수점 3째자리에서 반올림하며, 10cm 이하의 물고기들은 10cm 로 취급하여 평균 길이를 구하라

 

평균 길이를 나타내는 컬럼 명은 AVERAGE_LENGTH  AS AVERAGE_LENGTH

소수점 3째자리에서 반올림의 결과는 소수점 두 자리까지이다.  ROUND(결과 , 2): 소수점 두 자리까지 반올림 

 

정답 코드1 (WHEN CASE 서브 쿼리 활용)

SELECT ROUND(AVG(LENGTH), 2) AS AVERAGE_LENGTH
FROM(
    SELECT 
    CASE 
        WHEN LENGTH IS NULL THEN 10
        ELSE LENGTH 
    END AS LENGTH 
    FROM FISH_INFO
) AS SUB

 

FROM절 서브 쿼리 

CASE문 사용 

LENGTH 가 NULL 이면 10을 반환 

아니라면 원래의 LENGTH 반환 

 

메인 쿼리 

SELECT ROUND(AVG(LENGTH), 2) AS AVERAGE_LENGTH

 

AVG(LENGTH)를 사용해서 평균을 구하고 ROUND(AVG(LENGTH), 2) 활용하여 평균을 소수점 두 자리까지 반올림 

정답 코드2( IFNULL() 활용 )

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

 

 

IFNULL(expression, replacement)

expression이 NULL인 경우 replacement 반환 아니라면 expression 자체를 반환한다. 

 

SQL Server: ISNULL(expression, replacement)

MySQL: IFNULL(expression, replacement)

PostgreSQL: COALESCE(expression, replacement )

 

정답 코드3 (정답 코드2에서 IFNULL 사용 X)

SELECT ROUND(AVG(
    CASE 
        WHEN LENGTH IS NULL THEN 10 
        ELSE LENGTH 
    END), 2) AS AVERAGE_LENGTH
FROM FISH_INFO

 

정답 코드4 (AVG() 사용 X)

SELECT ROUND(SUM(
    CASE 
        WHEN LENGTH IS NULL THEN 10 
        ELSE LENGTH 
    END) / count(*), 2) AS AVERAGE_LENGTH
FROM FISH_INFO