본문 바로가기

SQL Kit/GROUP BY

월별 잡은 물고기 수 구하기 [ 프로그래머스 | SQL Kit | Level 2 ]

1. 문제목적

GROUP BY와 EXTRACT 함수를 활용하여 날짜 데이터를 특정 단위(월)로 그룹화하고, 각 월별 데이터를 집계하는 방법을 학습하기 위한 것입니다.


2. 핵심개념

EXTRACT 함수

  • 정의: 날짜/시간 데이터를 특정 요소(연도, 월, 일 등)로 추출하는 함수.
EXTRACT(단위 FROM 날짜컬럼)
  • 예시: EXTRACT(MONTH FROM '2025-01-22') → 결과: 1

GROUP BY

  • 정의: 데이터를 특정 컬럼 기준으로 그룹화하여 집계 작업을 수행할 수 있다.
SELECT 컬럼, 집계함수(컬럼)
FROM 테이블
GROUP BY 컬럼;

COUNT 함수

  • 정의: 특정 컬럼에서 행의 개수를 세는 집계 함수.
SELECT COUNT(컬럼)
FROM 테이블;
  • NULL 값은 기본적으로 제외한다.

WHERE 조건

  • 정의: 특정 조건에 부합하는 데이터만 필터링하여 쿼리를 실행한다.
SELECT *
FROM 테이블
WHERE 조건;

ORDER BY

  • 정의: 결과를 특정 컬럼 기준으로 정렬한다.
SELECT *
FROM 테이블
ORDER BY 컬럼 [ASC|DESC];

3. 문제해결 절차

  1. 데이터 분석:
    • FISH_INFO 테이블에는 물고기 길이(LENGTH)와 잡힌 시간(TIME) 데이터가 있다.
    • TIME 컬럼을 기준으로 월(MONTH)을 추출하여 그룹화가 필요하다.
  2. 요구사항 이해:
    • TIME 컬럼에서 월별 데이터를 추출해야 한다.
    • 월별로 잡힌 물고기의 수를 계산해야 한다.
    • 결과를 월 기준으로 오름차순 정렬한다.
  3. 문제 해결 계획:
    • EXTRACT 함수로 TIME 컬럼에서 월을 추출.
    • GROUP BY로 월을 그룹화.
    • COUNT 함수로 각 월별로 잡힌 물고기의 개수를 계산.
    • ORDER BY로 월을 기준으로 정렬.
  4. SQL문 작성:
    • 필요한 함수와 조건을 조합하여 쿼리를 작성.

4. 코드작성

--  월별 잡은 물고기 수를 계산
SELECT
    EXTRACT(MONTH FROM TIME) AS MONTH,  -- TIME 컬럼에서 월(MONTH) 추출
    COUNT(*) AS FISH_COUNT              -- 월별 잡은 물고기의 개수 계산
FROM
    FISH_INFO                           -- 물고기 정보 테이블
WHERE
    LENGTH IS NOT NULL                  -- 길이 값이 NULL이 아닌 데이터만 포함
GROUP BY
    MONTH                               -- 월(MONTH) 기준으로 그룹화
ORDER BY
    MONTH ASC;                          -- 월을 기준으로 오름차순 정렬

5. 코드분석

EXTRACT

  • EXTRACT(MONTH FROM TIME):예를 들어, '2025-01-22'에서 EXTRACT(MONTH)은 1을 반환한다.
  • 날짜(TIME)에서 월(MONTH)만 추출하여 그룹화를 가능하게 한다.

5.2 WHERE

  • WHERE LENGTH IS NOT NULL:이 조건은 데이터를 정제하여 정확한 집계 결과를 보장한다.
  • 길이 값(LENGTH)이 NULL인 경우는 잡은 물고기가 없는 데이터이므로 제외.

5.3 GROUP BY

  • GROUP BY MONTH:
  • 추출한 월(MONTH)을 기준으로 데이터를 그룹화하여 각 월별 데이터를 구분.

5.4 COUNT

  • COUNT(*):
  • 각 그룹(월)별로 행의 개수를 계산하여 월별 잡힌 물고기의 개수를 구한다.

5.5 ORDER BY

  • ORDER BY MONTH ASC:
  • 결과를 월(MONTH) 기준으로 오름차순 정렬하여 출력.