본문 바로가기
문제풀이/SQL(My sql)

[문제풀이] 프로그래머스 - 물고기 종류 별 대어 찾기

by kime2 2024. 6. 25.
출처

 

문제

물고기 종류 별로 가장 큰 물고기의 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 ->결과반환

 

  1. WITH절 : FISH_INFO과 FISH_NAME_INFO을 fish_type을 기준으로 조인하여 length 의null값이 없을 경우 fish_type, id, fish_name, length,를 조회하고 fish_type을 기준으로 구분하여 length의 내립차순으로 row_number을 한다 > base 테이블 생성
  2. FROM 절:  base 테이블에서 
  3. WHERE 절: row_number가 1일때 
  4. 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