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

Dreamer·2025년 6월 4일

문제

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

나의 풀이

고민했던 부분 : CASE문의 위치

  1. 처음 작성 코드 : 오답
SELECT ROUND(SUM(LENGTH)/COUNT(ID),2) AS AVERAGE_LENGTH
FROM FISH_INFO
WHERE CASE 
        WHEN LENGTH IS NULL THEN 10
        WHEN LENGTH <= 10 THEN 10
        END
  1. 수정한 코드 : 정답
SELECT ROUND(AVG(CASE 
                    WHEN LENGTH IS NULL THEN 10
                    WHEN LENGTH <= 10 THEN 10  
                    ELSE LENGTH END), 2) AS AVERAGE_LENGTH
FROM FISH_INFO;

차이점과 문제점

  1. CASE문 위치 실수

    • ❌ WHERE절에 CASE문 → 행을 필터링하는 조건으로 사용됨
    • ✅ SELECT절 AVG() 안에 CASE문 → 각 행의 값을 조건부로 변환
  2. WHERE절에서 CASE문의 문제

    • WHERE절은 참/거짓 조건이 와야 하는데, CASE문이 10이라는 숫자값을 반환
    • 결과적으로 WHERE 10 (항상 참)이 되어 모든 행이 선택되지만 원하는 로직이 아님
  3. 계산 방식의 차이

    • ❌ 원본 LENGTH 값들의 합계를 행 수로 나눔 (조건부 변환 없음)
    • ✅ 각 LENGTH를 조건에 따라 변환한 후 평균 계산
  4. ELSE절 누락

    • CASE문에서 ELSE가 없으면 조건에 해당하지 않는 경우 NULL 반환

CASE문은 값을 변환할 때는 SELECT절에, 조건을 판단할 때는 WHERE절에 사용하자!

profile
Moving forward based on records

0개의 댓글