FISH_INFO 테이블의 구조는 다음과 같으며 ID, FISH_TYPE, LENGTH, TIME은 각각 잡은 물고기의 ID, 물고기의 종류(숫자), 잡은 물고기의 길이(cm), 물고기를 잡은 날짜를 나타냅니다.
FISH_NAME_INFO 테이블은 물고기의 이름에 대한 정보를 담고 있습니다. FISH_NAME_INFO 테이블의 구조는 다음과 같으며, FISH_TYPE, FISH_NAME 은 각각 물고기의 종류(숫자), 물고기의 이름(문자) 입니다.
물고기 종류 별로 가장 큰 물고기의 ID, 물고기 이름, 길이를 출력하는 SQL 문을 작성해주세요.
물고기의 ID 컬럼명은 ID, 이름 컬럼명은 FISH_NAME, 길이 컬럼명은 LENGTH로 해주세요.
결과는 물고기의 ID에 대해 오름차순 정렬해주세요.
단, 물고기 종류별 가장 큰 물고기는 1마리만 있으며 10cm 이하의 물고기가 가장 큰 경우는 없습니다.
생각한 풀이
1. 물고기 종류별로 가장 큰 물고기의 정보를 출력해야 한다
2. 그룹으로 구분해 가장 큰 길이 MAX()를 이용해 길이를 구한다
3. 두 테이블을 FISH_TYPE으로 조인을 하고 WHERE절에 서브쿼리로 길이가 가장 큰 물고기를 찾는다
SELECT I.ID ,N.FISH_NAME,I.LENGTH AS LENGTH
FROM FISH_INFO I JOIN FISH_NAME_INFO N ON I.FISH_TYPE=N.FISH_TYPE
WHERE I.LENGTH= (SELECT MAX(LENGTH)
FROM FISH_INFO
WHERE FISH_TYPE = I.FISH_TYPE)
ORDER BY I.ID
🐴 풀이
1. FROM절에서 두 테이블을 FISH_TYPE으로 조인한다
2. WHERE절에서 I 테이블의 LENGTH가 서브쿼리의 출력 값인 물고기 종류별 최대 길이 값이랑 같은 값을 찾는다