[코딩 테스트]/SQL 코딩 테스트

[프로그래머스 SQL] 물고기 종류별 대어 찾기

icepack788 2024. 9. 27. 16:01

문제 풀이 코드

WITH FISH_LENGTH_MAX AS 
 ( SELECT 
       MAX(LENGTH) AS MAX_LENGTH,
       FISH_TYPE
    FROM FISH_INFO 
    GROUP BY FISH_TYPE)

SELECT
        I.ID,
        N.FISH_NAME,
        M.MAX_LENGTH AS LENGTH
FROM FISH_LENGTH_MAX M 
JOIN FISH_INFO I ON M.FISH_TYPE = I.FISH_TYPE AND M.MAX_LENGTH = I.LENGTH
JOIN FISH_NAME_INFO N ON M.FISH_TYPE = N.FISH_TYPE
ORDER BY 1 ASC ;

문제 - Level 3

물고기 종류별로 가장 큰 물고기의 ID, 물고기 이름, 길이를 출력하는 SQL 문을 작성해주세요.
물고기의 ID 컬럼명은 ID, 이름 컬럼명은 FISH_NAME, 길이 컬럼명은 LENGTH로 해주세요.
결과는 물고기의 ID에 대해 오름차순 정렬해주세요.
단, 물고기 종류별 가장 큰 물고기는 1마리만 있으며 10cm 이하의 물고기가 가장 큰 경우는 없습니다.

설명 

너무 오랜만에 sql 문제를 풀어서 그런지 멍하니 풀다가 시간이 꽤나 오래 걸렸고, 해설 코드를 찾아보다가 서브쿼리 혹은 WITH 문을 사용해야한다는 힌트를 보고 아! 하면서 풀었던 문제. Level3에 맞게 그렇게 어렵지도, 그렇게 쉽지도 않은 문제였다. 물고기 종류별로 묶어야해서 group by를 어떻게 해야하나~만 신경쓰고 있었는데, 정작 답에서는 물고기 종류(fish_type)에 대해서는 출력을 요구하지 않고 있음에 대해서 눈치를 챘어야 했다!! 다른 사람들의 풀이가 궁금해서 여러 쿼리들을 살펴봤는데 진짜 '코드 가독성' 이 중요하다는 것을 새삼 느꼈다... 분명 같은 문제인데 풀이는 다를 수 있지만 너무 지저분하고, 알아보기 힘들게 만든 코드들이 많더라.. 그래서 개인적으로 WITH문을 활용해서 깔끔하게 해주는게 좋은 것 같다. 

먼저는 가장 긴 물고기의 길이를 구해준 다음에, WITH문을 활용, JOIN을 통해서 테이블들가 연결해주면 되는데, AND 조건으로 FISH_TYPE 뿐만 아니라, LENGTH도 함께 조건으로 걸어주어야한다는 사실!!(정확한 이유는 모르겠지만, MAX를 걸어주었기 때문에 가장 큰 물고기들만 가져와야하기 때문이지 않을까 추측...)

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

 

프로그래머스

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

programmers.co.kr

반응형