문제
특정 조건을 만족하는 물고기별 수와 최대 길이 구하기 - LEVEL3
https://school.programmers.co.kr/learn/courses/30/lessons/298519
FISH\_INFO에서 평균 길이가 33cm 이상인 물고기들을 종류별로 분류하여 잡은 수, 최대 길이, 물고기의 종류를 출력하는 SQL문을 작성해주세요. 결과는 물고기 종류에 대해 오름차순으로 정렬해주시고, 10cm이하의 물고기들은 10cm로 취급하여 평균 길이를 구해주세요.
컬럼명은 물고기의 종류 'FISH\_TYPE', 잡은 수 'FISH\_COUNT', 최대 길이 'MAX\_LENGTH'로 해주세요.
문제 풀이에 앞서..
1. GROUP BY 문법
SELECT 컬럼 FROM 테이블 GROUP BY 그룹화할 컬럼;
테이블에서 특정 컬럼을 기준으로 묶어서 select 하고 싶은 경우, GROUP BY 절을 활용하여 select 한다.
위 문제에서는 fish_type을 기준으로 사용 가능
2. SQL 처리 순서
>> SQL 쿼리문 작성 순서
1. select
2. from
3. where
4. group by
5. having
6. order by
>> SQL 쿼리문 처리(실행) 순서
1. from
2. on
3. join
4. where
5. group by
6. having
7. select
8. distinct
9. order by
문제 풀이
1. 물고기 종류별 그룹화 및 평균 길이 조건 적용
select count(*) FISH_COUNT, MAX(length) as max_length, fish_type
from fish_info
group by fish_type
having avg(length)>=33
order by fish_type
fish_type을 기준으로 그룹화 후 having절을 통해 평균 길이가 33이상인 결과 뽑기
2. 10cm 이하 물고기들 = 10cm 취급
10cm 이하 = NULL 값으로 표기 -> IFNULL?
select fish_type, ifnull(length,10) as length
from fish_info
NULL 값들을 10으로 대체
3. 2를 1에 넣음
2를 1의 서브쿼리로 넣어줌
having 절에서 평균 값을 구하기 전에 NULL 인 값들이 10으로 바뀌어야 함
코드 구조는 select 문제 먼저이지만, 실행 순서가
from -> group by -> having -> select
이기 때문에 select 절에서 ifnull로 조건을 걸려고 하면 늦었다!
코드
select count(*) FISH_COUNT, MAX(length) as max_length, fish_type
from (select fish_type, ifnull(length,10) as length
from fish_info) info
group by fish_type
having avg(length)>=33
order by fish_type
주의 ) 서브쿼리 사용시 별칭(alias) 지정 필수
'SQL' 카테고리의 다른 글
[프로그래머스/PRGMS] 299310 연도별 대장균 크기의 편차 구하기 (서브쿼리, Window 함수) (0) | 2025.02.07 |
---|