ABOUT ME

Today
Yesterday
Total
  • Programmers - 잡은 물고기의 평균 길이 구하기(IS NULL, CASE)
    MySQL_Programmers/Level1 2025. 2. 19. 16:25
    반응형

    문제 설명


    낚시앱에서 사용하는 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

     


    정답

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

     

    1. NULL 값 처리

    문제에서는 NULL 값에 대해 10cm로 취급해야 하므로, NULL 값이 있는 행에 대해서는 10을 대신 사용해야 합니다. 이를 위해 SQL에서 CASE WHEN 구문을 사용하여 LENGTH 값이 NULL일 때 10으로 처리하도록 합니다.

     

    2. 평균 계산

    평균을 계산하려면, LENGTH 값들의 합을 구한 뒤, 해당 값들의 개수로 나누면 됩니다. 이때 NULL 값을 10으로 취급하는 것이 중요합니다.

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

     

    • CASE WHEN LENGTH IS NULL THEN 10 ELSE LENGTH END: 이 구문은 LENGTH가 NULL일 때 10을 반환하고, 그렇지 않으면 실제 LENGTH 값을 반환합니다.
    • AVG(...): 이 함수는 처리된 LENGTH 값을 모두 평균 내는 함수입니다.
    • ROUND(..., 2): 계산된 평균 값을 소수점 2자리까지 반올림합니다.

    CASE WHEN 구문 구조

    CASE WHEN 구문은 아래와 같은 형식을 따릅니다:

    CASE
        WHEN 조건1 THEN 결과1
        WHEN 조건2 THEN 결과2
        ...
        ELSE 기본결과
    END

     

    이 구문에서의 역할:

    • WHEN LENGTH IS NULL THEN 10: 이 조건은 LENGTH가 NULL인 경우에 10을 반환하게 합니다.
    • ELSE LENGTH: LENGTH가 NULL이 아닌 경우에는 실제 LENGTH 값을 반환합니다.
    • END: 조건문이 끝났음을 나타내는 부분으로, SQL에서 CASE 구문을 닫는 역할을 합니다.

    따라서, 전체 구문은 LENGTH가 NULL인 경 SQL쿼리 우 10을 사용하고, 그렇지 않으면 LENGTH 값을 그대로 반환하도록 동작합니다.

     

    CASE
        WHEN LENGTH IS NULL THEN 10
        ELSE LENGTH
    END

    이 구문은 다음과 같이 해석됩니다:

    • LENGTH 값이 NULL이라면 10을 반환합니다.
    • 그렇지 않으면 (즉, LENGTH 값이 NULL이 아니면) 그 값을 그대로 반환합니다.

    END는 CASE 조건문을 끝내고, 결과값을 반환하도록 합니다.

    반응형

    댓글

Designed by Tistory.