프로그래머스 - 물고기 종류 별 대어 찾기

윤민선·2026년 7월 8일

프로그래머스

목록 보기
38/77

문제 설명

FISH_INFO 테이블과 FISH_NAME_INFO 테이블을 활용해 물고기 종류별로 가장 큰 물고기의 ID, 이름, 길이를 ID 오름차순으로 조회하는 문제이다.

테이블주요 컬럼
FISH_INFOID, FISH_TYPE, LENGTH
FISH_NAME_INFOFISH_TYPE, FISH_NAME

FISH_TYPE을 공통으로 갖고 있어서, 이걸 기준으로 연결할 수 있다.


접근 방법

FISH_TYPE 기준으로 INNER JOIN을 사용하였다.
FISH_NAMEFISH_NAME_INFO에, IDLENGTHFISH_INFO에 있다.

"종류별로 가장 큰 물고기"를 찾으려면 먼저 종류별 최대 길이를 구해야 한다. 서브쿼리로 GROUP BY FISH_TYPE을 사용해 종류별 MAX(LENGTH)를 먼저 집계하였다.

SELECT fi.FISH_TYPE, MAX(fi.LENGTH)
FROM FISH_INFO fi
GROUP BY fi.FISH_TYPE
-- 풀어 쓰면
WHERE FISH_TYPE = 서브쿼리의 FISH_TYPE
  AND LENGTH = 서브쿼리의 MAX_LENGTH
 
-- 압축하면
WHERE (FISH_TYPE, LENGTH) IN (서브쿼리)
(FISH_TYPE=1, LENGTH=70.5) → 서브쿼리에 있음 ✅ → 포함 (대어)
(FISH_TYPE=1, LENGTH=50.0) → 서브쿼리에 없음 ❌ → 제외

ORDER BY 1은 첫 번째 SELECT 컬럼인 ID 기준 오름차순 정렬을 의미한다.

구체적으로 정리한 풀이 흐름:

  1. FISH_TYPE 기준으로 두 테이블 INNER JOIN
  2. 서브쿼리로 종류별 MAX(LENGTH) 구하기
  3. WHERE (FISH_TYPE, LENGTH) IN (서브쿼리)로 대어만 필터
  4. ORDER BY 1로 ID 오름차순 정렬

최종 코드

SELECT
    FISH_INFO.ID,
    FISH_NAME_INFO.FISH_NAME,
    FISH_INFO.LENGTH
FROM FISH_INFO
INNER JOIN FISH_NAME_INFO
    ON FISH_INFO.FISH_TYPE = FISH_NAME_INFO.FISH_TYPE
WHERE (FISH_INFO.FISH_TYPE, FISH_INFO.LENGTH) IN (
    SELECT fi.FISH_TYPE, MAX(fi.LENGTH)
    FROM FISH_INFO fi
    GROUP BY fi.FISH_TYPE
)
ORDER BY 1

0개의 댓글