[프로그래머스/PRGMS] 298519 특정 조건을 만족하는 물고기별 수와 최대 길이 구하기 - SQL 고득점 Kit

2025. 2. 6. 15:01·💻 알고리즘/SQL

문제

특정 조건을 만족하는 물고기별 수와 최대 길이 구하기 - 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] 301650 특정 세대의 대장균 찾기 (자기 참조, 서브 쿼리)  (0) 2025.02.17
[프로그래머스/PRGMS] 299307/301649 대장균의 크기에 따라 분류하기 1, 2 (CASE WHEN , WINDOW 함수)  (8) 2025.02.10
[프로그래머스/PRGMS] 299310 연도별 대장균 크기의 편차 구하기 (서브쿼리, Window 함수)  (0) 2025.02.07
'💻 알고리즘/SQL' 카테고리의 다른 글
  • [프로그래머스/PRGMS] 301650 특정 세대의 대장균 찾기 (자기 참조, 서브 쿼리)
  • [프로그래머스/PRGMS] 299307/301649 대장균의 크기에 따라 분류하기 1, 2 (CASE WHEN , WINDOW 함수)
  • [프로그래머스/PRGMS] 299310 연도별 대장균 크기의 편차 구하기 (서브쿼리, Window 함수)
.밍.
.밍.
  • .밍.
    Do IT
    .밍.
  • 전체
    오늘
    어제
    • All (40)
      • 💻 알고리즘 (21)
        • PS (16)
        • SQL (4)
        • 이론 (5)
      • 🎈capstone (2)
      • 💪Backend (12)
        • Django (8)
        • Spring (4)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    bruteforce
    응답형식
    BOJ
    다중조인
    crud
    programmers
    알고리즘
    백준
    재귀
    window함수
    문제풀이
    MYSQL
    스프링배치
    apiresponse
    BFS
    프로그래머스
    ETL
    파이썬
    Django
    SQL
    python
    자바
    responsecustomclass
    코테
    스케줄러
    springscheduler
    Batch
    서브쿼리
    resposneentity
    PS
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
.밍.
[프로그래머스/PRGMS] 298519 특정 조건을 만족하는 물고기별 수와 최대 길이 구하기 - SQL 고득점 Kit
상단으로

티스토리툴바