2026. 5. 11. 22:58ㆍ프로그래머스 SQL
문제 설명
낚시앱에서 사용하는 FISH_INFO 테이블은 잡은 물고기들의 정보를 담고 있습니다. FISH_INFO 테이블의 구조는 다음과 같으며 ID, FISH_TYPE, LENGTH, TIME은 각각 잡은 물고기의 ID, 물고기의 종류(숫자), 잡은 물고기의 길이(cm), 물고기를 잡은 날짜를 나타냅니다.

단, 잡은 물고기의 길이가 10cm 이하일 경우에는 LENGTH 가 NULL 이며, LENGTH 에 NULL 만 있는 경우는 없습니다.
FISH_NAME_INFO 테이블은 물고기의 이름에 대한 정보를 담고 있습니다. FISH_NAME_INFO 테이블의 구조는 다음과 같으며, FISH_TYPE, FISH_NAME 은 각각 물고기의 종류(숫자), 물고기의 이름(문자) 입니다.

문제
물고기 종류 별로 가장 큰 물고기의 ID, 물고기 이름, 길이를 출력하는 SQL 문을 작성해주세요.
물고기의 ID 컬럼명은 ID, 이름 컬럼명은 FISH_NAME, 길이 컬럼명은 LENGTH로 해주세요.
결과는 물고기의 ID에 대해 오름차순 정렬해주세요.
단, 물고기 종류별 가장 큰 물고기는 1마리만 있으며 10cm 이하의 물고기가 가장 큰 경우는 없습니다.
문제 핵심
1.FISH_INFO와 FISH_NAME_INFO를 FISH_TYPE 기준으로 합쳐야한다. (join 사용)
2.물고기의 종류별로 가장 긴 길이를 찾아낸다. (Group by , Max 사용)
3.찾아낸 가장 긴 길이를 가진 물고기의 ID 와 이름을 추출한다. (서브쿼리 활용)
SELECT 로 결국에 최종적으로 출력할 컬럼들 호출 SELECT FI.ID, FNI.FISH_NAME, FI.LENGTH
->Join 으로 두 테이블이 공통으로 가지고있는 FISH_TYPE 을 key 로 삼아서 데이터를 합친다.
-> WHERE 을 이용해서 가장 큰 물고기만 필터링(그냥 MAX(LENGTH)만 사용하면 ID 를 정확히 집어오기 힘들기때문)
그 후 오름차순 정렬해서 마무리
답변
SELECT FI.ID, FNI.FISH_NAME, FI.LENGTH
FROM FISH_INFO FI
JOIN FISH_NAME_INFO FNI ON FI.FISH_TYPE = FNI.FISH_TYPE
WHERE (FI.FISH_TYPE, FI.LENGTH) IN (
SELECT FISH_TYPE, MAX(LENGTH)
FROM FISH_INFO
GROUP BY FISH_TYPE
)
ORDER BY FI.ID ASC;
단순히 JOIN 만 하는게아니고 서브쿼리를 활용해서 그룹 내 최댓값의 전체 정보를 찾아내는 것이 핵심인 문제였다.
'프로그래머스 SQL' 카테고리의 다른 글
| 9.프로그래머스 SQL lv.3 (조건별로 분류하여 주문상태 출력하기) (0) | 2026.05.19 |
|---|---|
| 8. 프로그래머스 SQL lv.3(조회수가 가장 많은 중고거래 게시판의 첨부파일 조회하기) (0) | 2026.05.19 |
| 6. 프로그래머스 SQL lv.3 ( 조건에 맞는 사용자와 총 거래금액 조회하기 ) (0) | 2026.05.08 |
| 5.프로그래머스 SQL lv2.5 (다양한 음식을 즐긴 미식가 찾기 ai생성문제) (0) | 2026.05.04 |
| 4.프로그래머스 SQL lv3 (조건에 맞는 사용자 정보 조회하기) (0) | 2026.05.03 |