https://school.programmers.co.kr/learn/courses/30/lessons/293261
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
🔍 문제
물고기 종류 별로 가장 큰 물고기의 ID, 물고기 이름, 길이를 출력하는 SQL 문을 작성해주세요.
물고기의 ID 컬럼명은 ID, 이름 컬럼명은 FISH_NAME, 길이 컬럼명은 LENGTH로 해주세요.
결과는 물고기의 ID에 대해 오름차순 정렬해주세요.
단, 물고기 종류별 가장 큰 물고기는 1마리만 있으며 10cm 이하의 물고기가 가장 큰 경우는 없습니다.
🎯정답
-- 내 풀이
SELECT C.ID, D.FISH_NAME, C.LENGTH
FROM
(SELECT A.ID, A.FISH_TYPE, A.LENGTH
FROM FISH_INFO A JOIN (
SELECT FISH_TYPE, MAX(LENGTH) AS LENGTH
FROM FISH_INFO
GROUP BY FISH_TYPE) B
ON A.FISH_TYPE = B.FISH_TYPE AND A.LENGTH = B.LENGTH) C JOIN FISH_NAME_INFO D ON C.FISH_TYPE = D.FISH_TYPE
ORDER BY C.ID;
-- WHERE 절에 IN을 사용한 풀이
SELECT
D.FISH_NAME,
A.ID,
A.LENGTH
FROM
FISH_INFO A
JOIN
FISH_NAME_INFO D
ON
A.FISH_TYPE = D.FISH_TYPE
WHERE
(A.FISH_TYPE, A.LENGTH) IN (
SELECT
FISH_TYPE,
MAX(LENGTH)
FROM
FISH_INFO
GROUP BY
FISH_TYPE
)
ORDER BY
A.ID;
❓풀이
- 나는 FROM 절에 연속해서 서브쿼리를 두 번 사용해서 풀이했으나, where절에 서브쿼리를 한번만 사용해서 IN으로 FISH_TYPE과 LENGTH를 찾아내는 방법도 있다.
'프로그래밍 언어 > 02. SQL' 카테고리의 다른 글
| [SQL] 프로그래머스 LV.4 보호소에서 중성화한 동물 (2) | 2025.08.14 |
|---|---|
| [SQL] 프로그래머스 LV.3 대장균의 크기에 따라 분류하기 2 (1) | 2025.08.14 |
| [SQL] 프로그래머스 LV.3 대장균들의 자식의 수 구하기 (4) | 2025.08.13 |
| [SQL] 프로그래머스 LV.3 대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기 (2) | 2025.08.10 |
| [SQL] 프로그래머스 LV.3 헤비 유저가 소유한 장소 (0) | 2025.08.10 |
