물고기 종류 별로 가장 큰 물고기의 ID, 물고기 이름, 길이를 출력하는 SQL 문을 작성해주세요.
물고기의 ID 컬럼명은 ID, 이름 컬럼명은 FISH_NAME, 길이 컬럼명은 LENGTH로 해주세요.
결과는 물고기의 ID에 대해 오름차순 정렬해주세요.
단, 물고기 종류별 가장 큰 물고기는 1마리만 있으며 10cm 이하의 물고기가 가장 큰 경우는 없습니다.
https://school.programmers.co.kr/learn/courses/30/lessons/293261
WITH maxlength AS(
SELECT ID, f.FISH_TYPE, f.LENGTH
FROM FISH_INFO f
INNER JOIN (
SELECT FISH_TYPE, MAX(LENGTH) AS LENGTH
FROM FISH_INFO
GROUP BY FISH_TYPE) a
ON f.FISH_TYPE = a.FISH_TYPE
AND f.LENGTH = a.LENGTH)
SELECT ID, FISH_NAME, LENGTH
FROM FISH_NAME_INFO f
INNER JOIN maxlength m
ON f.FISH_TYPE = m.FISH_TYPE
ORDER BY ID
WITH 절에서 INNER JOIN 부분을 완벽하게 내가 작성하지 못했다. 2개의 WITH(CTE) 절을 사용해서 합치려고 했는데 한 쿼리에 CTE는 1개만 존재해야 하는 것을 몰랐다.... (대신 , 를 통해 구분하여 사용할 수 있다는 것을 발견!!)WITH a AS (
SELECT FISH_TYPE, MAX(LENGTH) AS LENGTH
FROM FISH_INFO
GROUP BY FISH_TYPE
), b AS (
SELECT F.*
FROM FISH_INFO f
INNER JOIN a ON (f.FISH_TYPE = a.FISH_TYPE) AND (f.LENGTH = a.LENGTH)
)
SELECT ID, FISH_NAME, LENGTH
FROM b
INNER JOIN FISH_NAME_INFO f
ON b.FISH_TYPE = f.FISH_TYPE
ORDER BY b.ID;