


WITH SUB AS (
SELECT FISH_TYPE, MAX(LENGTH) AS MAX_LEN
FROM FISH_INFO
WHERE LENGTH IS NOT NULL
GROUP BY FISH_TYPE
)
SELECT ID, FISH_NAME, LENGTH
FROM FISH_INFO
JOIN FISH_NAME_INFO USING(FISH_TYPE)
JOIN SUB USING (FISH_TYPE)
WHERE LENGTH = SUB.MAX_LEN
ORDER BY ID;
서브쿼리를 이용하여 FISH_TYP별 LENGTH의 최대값을 구해준다.
서브쿼리 테이블과 FISH_INFO, FISH_NAME_INFO 테이블을 JOIN 해주기 위해 FISH_TYPE을 사용하고, 서브쿼리 테이블에서 구한 최대값과 FISH_INFO 테이블의 LENGTH 값이 같은 데이터를 조회하여 FISH_TYPE별 최대값을 가진 데이터를 조회할 수 있다.