[MySQL] 물고기 종류 별 대어 찾기
2024. 7. 11.
반응형

https://school.programmers.co.kr/learn/courses/30/lessons/293261

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

 

1. 서론

 

max 함수를 활용하는 문제... 지만 서브쿼리도 사용해야 함!

레벨 3이라고 했는데 그렇게 어렵진 않다... (사실 조금 복잡하긴 해요)

 

2. 문제 풀이

 

FISH_INFO: ID, FISH_TYPE, LENGTH, TIME

(잡은 물고기의 ID, 물고기의 종류(숫자), 잡은 물고기의 길이(cm), 물고기를 잡은 날짜)

 

FISH_NAME_INFO:

FISH_TYPE, FISH_NAME

(물고기의 종류(숫자), 물고기의 이름(문자))

 

Q. 물고기 종류 별로 가장 큰 물고기의 ID, 물고기 이름, 길이를 출력하는 SQL 문을 작성해 주세요.

물고기의 ID 컬럼명은 ID, 이름 컬럼명은 FISH_NAME, 길이 컬럼명은 LENGTH로 해주세요.
결과는 물고기의 ID에 대해 오름차순 정렬해 주세요.

 

 

물고기 종류별로 가장 큰 => group by를 사용해야 한다. 그래서 서브쿼리를 사용했다.

왜냐하면 select 해야 하는 것은 id, fish_name, length인데 group by를 사용하려면 select 문에 있는 것을 전부 group by 절에 적어야 한다. 하지만 그러면 group by 하는 의미가 사라짐...

 

그래서 서브쿼리에서 group by를 통해서 물고기 종류별로 가장 큰 length를 구하고, 이 정보를 토대로 메인 쿼리에서 같은 값을 출력하면 된다.

 

 

 

3. 코드 설명

 

select f.id, i.fish_name, x.length
from fish_info f, fish_name_info i,
    (select f.fish_type as type, max(f.length) as length
    from fish_info f
    group by f.fish_type) x
where f.fish_type = x.type // 서브와 메인 쿼리의 타입이 일치
and f.fish_type = i.fish_type  // 두 테이블의 fk
and x.length = f.length // id출력을 위해 어떤 물고기의 length인지 맞춰주는 역할
order by f.id

 

서브쿼리에서 fish_type과 length 값을 가지고

메인쿼리에서 그 값이 일치하도록 where절에서 조건을 붙여줬다.

 

 

그런데 그렇게 썩 잘 만든 문제는 아닌 게 조건에 오름차순 정렬을 해달라고 했는데 order by를 깜빡하고 안 넣었는데도 맞았다... ㅋㅋ

사실 max 카테고리의 문제인데 지금 보니까 group by 카테고리 문제라고 해도 될 듯...ㅋㅋㅋㅋ

 

 

 

 

반응형
myoskin