Algorithm/Programmers SQL

[MySQL] 프로그래머스 특정 조건을 만족하는 물고기별 수와 최대 길이 구하기

제우제우 2024. 9. 15. 18:27

https://school.programmers.co.kr/learn/courses/30/lessons/298519

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

코딩테스트 연습 > GROUP BY > 특정 조건을 만족하는 물고기별 수와 최대 길이 구하기

 

문제 분석

난이도: LEVEL3

 

문제 요구사항

FISH_INFO에서 평균 길이가 33cm 이상인 물고기들을 종류별로 분류하여 잡은 수, 최대 길이, 물고기의 종류를 출력하는 SQL문을 작성해주세요. 

결과는 물고기 종류에 대해 오름차순 정렬해주시고, 10cm이하의 물고기들은 10cm로 취급하여 평균 길이를 구해주세요.
컬럼명은 물고기의 종류 'FISH_TYPE', 잡은 수 'FISH_COUNT', 최대 길이 'MAX_LENGTH'로 해주세요.

 

정답 코드1(CTE 활용)

WITH FISH_CTE AS (
    SELECT FISH_TYPE, IF(LENGTH IS NULL, 10, LENGTH) LENGTH
    FROM FISH_INFO
)
SELECT COUNT(*) FISH_COUNT, MAX(LENGTH) MAX_LENGTH, FISH_TYPE
FROM FISH_CTE
GROUP BY FISH_TYPE
HAVING AVG(LENGTH) >= 33
ORDER BY FISH_TYPE

 

1. CTE를 활용하여 길이가 10cm 이하인 물고기들(NULL)을 10cm 변환 

2. 미리 구해둔 CTE를 활용하여 물고기 타입으로 GROUP BY 하고 HAVING 평균 길이가 33 cm 이상인 그룹만 필터링 

 

정답 코드2(IFNULL 활용)

SELECT COUNT(*) FISH_COUNT, MAX(LENGTH) MAX_LENGTH, FISH_TYPE
FROM FISH_INFO
GROUP BY FISH_TYPE
HAVING AVG(IFNULL(LENGTH, 10)) >= 33
ORDER BY FISH_TYPE