inblog logo
|
An's Blog
    코딩테스트SQL

    [코딩테스트] 35. 특정 조건을 만족하는 물고기별 수와 최대 길이 구하기

    윤설안's avatar
    윤설안
    Apr 23, 2025
    [코딩테스트] 35. 특정 조건을 만족하는 물고기별 수와 최대 길이 구하기
    Contents
    테이블 index문제예시풀이

    테이블 index

    📌

    FISH_INFO 

    Column name
    Type
    Nullable
    ID
    INTEGER
    FALSE
    FISH_TYPE
    INTEGER
    FALSE
    LENGTH
    FLOAT
    TRUE
    TIME
    DATE
    FALSE

    문제

    💡
    FISH_INFO에서 평균 길이가 33cm 이상인 물고기들을 종류별로 분류하여 잡은 수, 최대 길이, 물고기의 종류를 출력하는 SQL문을 작성해주세요. 결과는 물고기 종류에 대해 오름차순으로 정렬해주시고, 10cm이하의 물고기들은 10cm로 취급하여 평균 길이를 구해주세요.
    컬럼명은 물고기의 종류 'FISH_TYPE', 잡은 수 'FISH_COUNT', 최대 길이 'MAX_LENGTH'로 해주세요.

    예시

    notion image

    풀이

    ❗
    평균을 구하기 위해서는 FISH_TYPE을 GROUP으로 묶어서 MAX함수를 이용하여 가장 큰 값을 구하고, COUNT함수로 해당 FISH_TYPE에 몇 개의 column이 있는지 표시해주었다.
    SELECT count(*) FISH_COUNT, max(LENGTH) MAX_LENGTH, FISH_TYPE FROM FISH_INFO group by FISH_TYPE
    현재 FISH_INFO에는 null인 LENGTH가 있는데 이것을 문제 조건에 맞게 10이하면 10으로 취급하고 그것도 포함하여 평균을 낸다.
    SELECT count(*) FISH_COUNT, max(LENGTH) MAX_LENGTH, FISH_TYPE FROM FISH_INFO where avg(IFNULL(LENGTH, 10) >= 33) group by FISH_TYPE
    처음에 where 절을 사용하면 되지 않을까 싶었는데, avg함수는 group으로 묶은 후에 사용이 가능했다. 하지만 sql query 실행 순서 상 where이 먼저 실행 되기때문에 where절에 avg함수를 사용하게 되면 무엇을 묶어서 평균을 내야할지 모르기 때문에 오류가 난다. 해결 방법은 group by 후 실행 되는 having을 사용하면된다
    SELECT count(*) FISH_COUNT, max(LENGTH) MAX_LENGTH, FISH_TYPE FROM FISH_INFO group by FISH_TYPE having avg(IFNULL(LENGTH, 10) >= 33) ;
    그 후에 잘 Query가 실행되는 것을 확인 후 order by 를 이용하여 정렬을 해주었다
    SELECT count(*) FISH_COUNT, max(LENGTH) MAX_LENGTH, FISH_TYPE FROM FISH_INFO group by FISH_TYPE having avg(IFNULL(LENGTH, 10) >= 33) order by FISH_TYPE
    이후 채점을 하였을 때 실패가 나오길래 무슨 문제일까 생각해보았는데, 현재는 null인 경우만 10으로 취급을 하였고 문제에서는 10이하여도 10으로 취급하라고 하였기 때문에 그 조건을 처리하지 않아서 실패가 나왔다. GREATEST를 사용하여 10이하이며. null인 값은 모두 10으로 취급하는 조건을 만들었다.
    SELECT count(*) FISH_COUNT, max(LENGTH) MAX_LENGTH, FISH_TYPE FROM FISH_INFO group by FISH_TYPE HAVING AVG(GREATEST(IFNULL(LENGTH, 10), 10)) >= 33 order by FISH_TYPE
    notion image
     
     
     
    Share article
    Contents
    테이블 index문제예시풀이

    An's Blog

    RSS·Powered by Inblog