https://school.programmers.co.kr/learn/courses/30/lessons/293261
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제

내 풀이
스스로 풀어본 결과는 아래와 같습니다.
SELECT A.ID, C.FISH_NAME, A.LENGTH
FROM FISH_INFO A
JOIN (SELECT FISH_TYPE, MAX(LENGTH) AS MAX_LENGTH FROM FISH_INFO GROUP BY FISH_TYPE) B
ON A.FISH_TYPE = B.FISH_TYPE
JOIN FISH_NAME_INFO C
ON A.FISH_TYPE = C.FISH_TYPE
WHERE A.LENGTH = B.MAX_LENGTH
ORDER BY A.ID
FISH NAME 정보도 따로고, 각 FISH TYPE별 최대 길이 정보도 따로 분리되어 있다보니
3개의 정보를 단순하게 하나로 엮기 위해
JOIN을 2번 적용하여 풀었습니다.
그렇다보니 시간은 조금 더 오래 걸리는 느낌이더라고요.
그래서 다른 사람들의 풀이를 찾아봐서 공부를 했습니다.
대체로 JOIN 1번에 IN을 활용하여 최대 길이 정보를 가져오더라고요.
보통은 아래와 같이 2가지 조건을 한꺼번에 비교해서 데이터를 가져오던데
(
SELECT FISH_TYPE, MAX(LENGTH)
FROM FISH_INFO
GROUP BY FISH_TYPE
)
아래와 같이 서브쿼리 단계에서 FI.FISH_TYPE을 외부 참조로 가져와서 처리하시는 분들도 있더라고요.
이런 방식으로도 참조가 가능하다니 새로운 것을 또 배우게 되었습니다.
SELECT FI.ID, FN.FISH_NAME, FI.LENGTH
FROM FISH_INFO AS FI
JOIN FISH_NAME_INFO AS FN
ON FI.FISH_TYPE = FN.FISH_TYPE
WHERE FI.LENGTH IN (
SELECT MAX(LENGTH)
FROM FISH_INFO
WHERE FISH_TYPE = FI.FISH_TYPE
GROUP BY FISH_TYPE
)
ORDER BY I.ID;
메모
프로그래머스 SQL / SUM, MAX, MIN / Lv.3
'SQL 문제풀이' 카테고리의 다른 글
| [MySQL | 프로그래머스] 조건에 맞는 도서와 저자 리스트 출력하기 (0) | 2024.08.24 |
|---|---|
| [MySQL | 프로그래머스] 경기도에 위치한 식품창고 목록 출력하기 (0) | 2024.08.22 |
| [MySQL | 프로그래머스] 연도별 대장균 크기의 편차 구하기 (0) | 2024.08.08 |
| [MySQL | 프로그래머스] 부모의 형질을 모두 가지는 대장균 찾기 (0) | 2024.08.01 |
| [MySQL | 프로그래머스] 특정 옵션이 포함된 자동차 리스트 구하기 (0) | 2024.07.26 |