❓문제
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
'Coding Test > SQL' 카테고리의 다른 글
[프로그래머스] 부모의 형질을 모두 가지는 대장균 찾기/MySQL - Lv.2 (0) | 2024.10.31 |
---|---|
[프로그래머스] 조건에 맞는 개발자 찾기/MySQL - Lv.2 (1) | 2024.10.31 |
[프로그래머스] 우유와 요거트가 담긴 장바구니/MySQL - Lv.4 (0) | 2024.09.29 |
[프로그래머스] 조건에 맞는 사용자 정보 조회하기/MySQL - Lv.3 (1) | 2024.09.28 |
[프로그래머스] 대장균의 크기에 따라 분류하기1/MySQL - Lv.3 (0) | 2024.09.28 |