[SQL] 물고기 종류 별 대어 찾기

2024. 5. 4. 21:48코딩 테스트

문제

 

 

개념
  • WHERE절 서브쿼리
    • WHERE (컬럼1, 컬럼2) IN (SELECT 컬럼1, MAX(컬럼2) FROM 테이블 GROUP BY 컬럼1)
    • 위와 같은 절로 각 컬럼1의 종류마다 컬럼2의 최대값 조건을 만들 수 있다. 
  • GROUP BY로 집계함수를 구할 경우 SELECT절에 있는 모든 컬럼이 집계함수이거나 GROUP BY절에 사용되어야 한다.(오답 참조)

 

오답
SELECT ID, FISH_NAME, MAX(LENGTH) AS LENGTH
FROM FISH_INFO JOIN FISH_NAME_INFO USING(FISH_TYPE)
GROUP BY FISH_NAME
ORDER BY 1

 

 

정답
SELECT ID, FISH_NAME, LENGTH
FROM FISH_INFO JOIN FISH_NAME_INFO USING(FISH_TYPE)
WHERE (FISH_TYPE, LENGTH) IN 
(
    SELECT FISH_TYPE, MAX(LENGTH) 
    FROM FISH_INFO 
    GROUP BY 1
)
ORDER BY 1