알고리즘 공부/SQL

[L3] 프로그래머스 MYSQL 물고기 종류 별 대어 찾기

마달랭 2024. 10. 18. 00:20
반응형

테이블 정보

1. FISH_INFO 

Column name Type Nullable
ID INTEGER FALSE
FISH_TYPE INTEGER FALSE
LENGTH FLOAT TRUE
TIME DATE FALSE

 

2. FISH_NAME_INFO 

Column name Type Nullable
FISH_TYPE INTEGER FALSE
FISH_NAME VARCHAR FALSE

 

 

예시 테이블

1. 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

 

2. FISH_NAME_INFO 

FISH_TYPE FISH_NAME
0 BASS
1 SNAPPER
2 ANCHOVY

 

3. 출력 기댓값

ID FISH_NAME
6 BASS
8 ANCHOVY
9 SNAPPER

 

문제

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

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

 

 

아이디어

  1. 물고기의 ID는 FISH_INFO에 물고기 이름은 FISH_NAME_INFO에 길이는 FISH_INFO에 있다.
  2. 따라서 두 테이블을 FISH_TYPE을 기준으로 조인 처리를 해주어야 한다.
  3. 우선 물고기 타입, 이름, 최대값을 출력하는 서브 쿼리를 제작해 준다.
  4. 해당 서브쿼리는 GROUP BY를 통해 길이의 최대값을 갖는 물고기 하나만 출력해 주어야 한다.
  5. 이제 FISH_INFO와 서브쿼리를 비교하여 FISH_TYPE이 같으면서 LENGTH가 같은 물고기만 선택해 준다.
  6. ID를 기준으로 오름차순을 하고 물고기의 ID, 이름, 길이를 출력해 주면 된다.

 

정답

-- 코드를 작성해주세요
SELECT F.ID, S.FISH_NAME, S.LENGTH
FROM (
    SELECT F.FISH_TYPE, N.FISH_NAME, MAX(F.LENGTH) AS LENGTH
    FROM FISH_INFO F INNER JOIN FISH_NAME_INFO N
    ON F.FISH_TYPE = N.FISH_TYPE
    GROUP BY F.FISH_TYPE, N.FISH_NAME
    ORDER BY 3 DESC
) S, FISH_INFO F
WHERE 1=1
AND F.FISH_TYPE = S.FISH_TYPE
AND F.LENGTH = S.LENGTH
ORDER BY F.ID

 

 

참고 사항

생각 나는대로 막 푼거라 최적화가 되어있다고 보장하지는 못한다.

 

 

 

728x90
반응형