[프로그래머스 SQL] GROUP BY 완벽 정리: 집계 함수와 시간 데이터 핸들링

이성진·2026년 3월 12일

프로그래머스 SQL

목록 보기
2/7

📌 GROUP BY: 데이터 그룹화와 집계 함수 활용

SELECT 파트가 데이터를 단순히 조회하는 것이었다면, GROUP BY는 흩어진 데이터를 의미 있는 단위로 묶어 통계를 내는 핵심 과정입니다. 이번 두 문제를 통해 특정 기준(카테고리, 시간대)별 집계 방식을 학습했습니다.


💡 1. 테이블 조인 후 그룹 집계

📝 카테고리 별 도서 판매량 집계하기 (JOIN + SUM)

SELECT B.CATEGORY, SUM(S.SALES) AS TOTAL_SALES
FROM BOOK_SALES S
JOIN BOOK B ON B.BOOK_ID = S.BOOK_ID
WHERE DATE_FORMAT(S.SALES_DATE, '%Y-%m') = '2022-01'
GROUP BY B.CATEGORY
ORDER BY B.CATEGORY;
  • 새로 배운 점: 1. 판매 기록(BOOK_SALES)과 도서 정보(BOOK)를 JOIN하여 카테고리 정보를 가져온 뒤, 카테고리별로 그룹화(GROUP BY)하는 흐름을 익혔습니다.
    1. 단순 COUNT가 아니라 판매량의 합계를 구할 때는 SUM(컬럼명) 집계 함수를 사용합니다.

💡 2. 시간 데이터 추출 및 필터링

📝 입양 시각 구하기(1) (HOUR 함수)

SELECT HOUR(DATETIME) AS HOUR, COUNT(*) AS COUNT
FROM ANIMAL_OUTS
WHERE HOUR(DATETIME) BETWEEN 9 AND 19
GROUP BY HOUR
ORDER BY HOUR;
  • 새로 배운 점:
    1. DATETIME 형식에서 시간 정보만 필요할 때 HOUR() 함수를 사용하면 0부터 23 사이의 값을 즉시 얻을 수 있습니다.
    2. WHERE 절에서 집계된 HOUR 값을 BETWEEN 연산자와 함께 사용하여 특정 시간대(09:00 ~ 19:59)만 필터링하는 효율적인 조건을 작성했습니다.

🚨 트러블 슈팅 및 회고

  • SELECT 절의 별칭(Alias) 활용: HOUR(DATETIME)AS HOUR라는 별칭을 붙여주면, 이후 GROUP BYORDER BY 절에서 긴 함수명 대신 HOUR라는 별칭으로 간결하게 쿼리를 작성할 수 있다는 점이 편리했습니다.
  • 실행 순서의 이해: WHERE로 먼저 데이터를 걸러낸 뒤 그룹화(GROUP BY)가 진행된다는 SQL의 실행 순서를 다시 한번 복습할 수 있었습니다.
profile
알고리즘과 cs지식 학습

0개의 댓글