출처
문제
물고기 종류 별로 가장 큰 물고기의 ID, 물고기 이름, 길이를 출력하는 SQL 문을 작성해주세요.
물고기의 ID 컬럼명은 ID, 이름 컬럼명은 FISH_NAME, 길이 컬럼명은 LENGTH로 해주세요.
결과는 물고기의 ID에 대해 오름차순 정렬해주세요.
단, 물고기 종류별 가장 큰 물고기는 1마리만 있으며 10cm 이하의 물고기가 가장 큰 경우는 없습니다.
문제에 대한 해석
-- 조회: fish type로 가장 큰 물고기의 ID, 물고기 이름 fish_name, 길이 length
-- 정렬 : id 오름차순
풀이(MYSQL)
with base as (
select i.fish_type, id, fish_name, length,
row_number()over(partition by i.fish_type order by length desc) rn
from FISH_INFO i join FISH_NAME_INFO n
on i.fish_type = n.fish_type
where length is not null
)
select id, fish_name, length
from base
where rn = 1
order by id
작동순서
💡SQL 실행 순서는 From -> Where -> Group by -> Having -> Select -> Order by ->결과반환
- WITH절 : FISH_INFO과 FISH_NAME_INFO을 fish_type을 기준으로 조인하여 length 의null값이 없을 경우 fish_type, id, fish_name, length,를 조회하고 fish_type을 기준으로 구분하여 length의 내립차순으로 row_number을 한다 > base 테이블 생성
- FROM 절: base 테이블에서
- WHERE 절: row_number가 1일때
- SELECT 절: id, fish_name, length를 조회
다른사람 풀이
-- 간단한 정답
select id, fish_name, length -- 4. 정답조회
frim fish_info i join fish_name_info n
on i.futh_type = n.fish_type
where (i.fish_type, length) in -- 3. fish_type별 최대 length값에 포함되는 fish_type과 length일 경우
(select fish_type, max(length) as length -- 2. fish_type별 최대 length값
from fish_info
group by fish_type) -- 1. fish_type별로 그룹화하여
order by id
'문제풀이 > SQL(My sql)' 카테고리의 다른 글
[문제풀이] 프로그래머스 - 대장균들의 자식의 수 구하기 (0) | 2024.06.26 |
---|---|
[문제풀이] 프로그래머스 - 보호소에서 중성화한 동물 (0) | 2024.06.25 |
[문제풀이] 프로그래머스 - 특정 세대의 대장균 찾기 (0) | 2024.06.24 |
[문제풀이] 프로그래머스 - 연간 평가점수에 해당하는 평가 등급 (0) | 2024.06.24 |
[문제풀이] Hacker Rank - Draw The Triangle 1, 2 (0) | 2024.06.20 |