물고기 종류 별로 가장 큰 물고기의 ID, 물고기 이름, 길이를 출력하는 SQL 문을 작성해주세요.
물고기의 ID 컬럼명은 ID, 이름 컬럼명은 FISH_NAME, 길이 컬럼명은 LENGTH로 해주세요.
결과는 물고기의 ID에 대해 오름차순 정렬해주세요.
단, 물고기 종류별 가장 큰 물고기는 1마리만 있으며 10cm 이하의 물고기가 가장 큰 경우는 없습니다.
SELECT
I.ID, -- 가장 큰 물고기의 ID
N.FISH_NAME, -- 물고기 이름
I.LENGTH -- 길이
FROM FISH_INFO I
INNER JOIN FISH_NAME_INFO N
ON I.FISH_TYPE = N.FISH_TYPE
GROUP BY I.FISH_TYPE
HAVING MAX(I.LENGTH)
ORDER BY I.ID
;
-- 이 코드가 실행되지 않는 이유는 SELECT문에 FISH_TYPE컬럼이 없기 때문이다.
--

-- 물고기 종류 별 가장 큰 물고기
SELECT
I.ID, -- 가장 큰 물고기의 ID
N.FISH_NAME, -- 물고기 이름
I.LENGTH -- 길이
FROM FISH_INFO I
INNER 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
;
GROUP BY를 사용할 때,
SELECT절의 모든 열은 GROUP BY절에 포함되거나,
집계함수를 통해 명확하게 정의되어야 한다.
=> 그룹화되지 않거나 집계되지 않은 열을 SELECT절에 포함시키는 것은 허용되지 않는다.