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. 문제해결 절차
- 데이터 분석:
- FISH_INFO 테이블에는 물고기 길이(LENGTH)와 잡힌 시간(TIME) 데이터가 있다.
- TIME 컬럼을 기준으로 월(MONTH)을 추출하여 그룹화가 필요하다.
- 요구사항 이해:
- TIME 컬럼에서 월별 데이터를 추출해야 한다.
- 월별로 잡힌 물고기의 수를 계산해야 한다.
- 결과를 월 기준으로 오름차순 정렬한다.
- 문제 해결 계획:
- EXTRACT 함수로 TIME 컬럼에서 월을 추출.
- GROUP BY로 월을 그룹화.
- COUNT 함수로 각 월별로 잡힌 물고기의 개수를 계산.
- ORDER BY로 월을 기준으로 정렬.
- 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) 기준으로 오름차순 정렬하여 출력.
'SQL Kit > GROUP BY' 카테고리의 다른 글
물고기 종류 별 잡은 수 구하기 [ 프로그래머스 | SQL Kit | Level 2 ] (0) | 2025.03.09 |
---|---|
노선별 평균 역 사이 거리 조회하기 [ 프로그래머스 | SQL Kit | Level 2 ] (0) | 2025.03.09 |
조건에 맞는 사원 정보 조회하기 [ 프로그래머스 | SQL Kit | Level 2 ] (0) | 2025.03.09 |
가격대 별 상품 개수 구하기 [ 프로그래머스 | SQL Kit | Level 2 ] (0) | 2025.03.09 |
입양 시각 구하기(1) [ 프로그래머스 | SQL Kit | Level 2 ] (0) | 2025.03.09 |