본문 바로가기
Coding Test/SQL

[프로그래머스] 물고기 종류 별 대어 찾기/MySQL - Lv.3

by The Future Engineer, Lucy 2024. 10. 29.
728x90
반응형

❓문제

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

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

문제

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

물고기의 ID 컬럼명은 ID, 이름 컬럼명은 FISH_NAME, 길이 컬럼명은 LENGTH로 해주세요.
결과는 물고기의 ID에 대해 오름차순 정렬해주세요.
단, 물고기 종류별 가장 큰 물고기는 1마리만 있으며 10cm 이하의 물고기가 가장 큰 경우는 없습니다.


예시

예를 들어 FISH_INFO 테이블이 다음과 같고

ID FISH_TYPE LENGTH TIME
0 0 30 2021/12/04
1 0 50 2020/03/07
2 0 40 2020/03/07
3 1 20 2022/03/09
4 1 NULL 2022/04/08
5 2 13 2021/04/28
6 0 60 2021/07/27
7 0 55 2021/01/18
8 2 73 2020/01/28
9 1 73 2021/04/08
10 2 22 2020/06/28
11 2 17 2022/12/23

FISH_NAME_INFO 테이블이 다음과 같다면

FISH_TYPE FISH_NAME
0 BASS
1 SNAPPER
2 ANCHOVY

'BASS' 중 가장 큰 물고기는 60cm 로 물고기 ID 가 6이고, 'SNAPPER' 중 가장 큰 물고기는 73cm 로 물고기 ID가 9입니다. 'ANCHOVY' 중 가장 큰 물고기는 73cm 로 물고기 ID가 8입니다. 따라서 물고기 ID(ID) 에 대해 오름차순 정렬한다면 결과는 다음과 같습니다.

ID FISH_NAME LENGTH
6 BASS 60
8 ANCHOVY 73
9 SNAPPER 73

📌유형

SUM, MAX, MIN

✍🏻풀이

서브쿼리를 사용한 이유
- group by fish_type으로 실행하면 ID가 의존적이므로 오류가 발생한다.
물고기 종류 별로 max값을 구한 서브쿼리 안에 최대 길이를 가진 물고기라면
그것의 ID, 물고기 이름, 길이를 ID에 대해 오름차순으로 출력한다.

💻코드

select ID, FISH_NAME, LENGTH
from FISH_INFO F inner join FISH_NAME_INFO N on F.FISH_TYPE = N.FISH_TYPE
# left outer join을 사용해도 무관
where (F.FISH_TYPE, LENGTH) in (select FISH_TYPE, max(LENGTH)
                               from FISH_INFO
                               group by FISH_TYPE)
order by ID
728x90
반응형