DB 데이터/MySQL 기본기 & 문법 정리

정렬(ORDER BY), 그룹화(GROUP BY), 집계 함수 정리

backend.log 2025. 4. 24. 18:00
728x90
반응형

📘 1-6. 정렬(ORDER BY), 그룹화(GROUP BY), 집계 함수 정리

SQL 쿼리에서 데이터를 원하는 순서로 정렬하거나 그룹화하여 통계를 내는 것은 데이터 분석과 통계 처리의 핵심입니다.
이번 포스팅에서는 ORDER BY, GROUP BY, 그리고 자주 쓰는 집계 함수(AVG, COUNT, SUM, MAX, MIN)를 실무 중심으로 정리합니다.


📌 ORDER BY – 정렬

SELECT * 
FROM users 
ORDER BY created_at DESC;

설명: 가입일(created_at) 기준으로 내림차순 정렬. 최신 데이터가 먼저 나옵니다.
기본 정렬 방식은 오름차순(ASC), 내림차순은 DESC로 명시합니다.

✅ 복수 조건 정렬

SELECT * 
FROM products 
ORDER BY category_id ASC, price DESC;

→ 카테고리 기준 오름차순, 같은 카테고리 내에서는 가격 내림차순


📌 GROUP BY – 그룹화

SELECT category_id, COUNT(*) AS product_count 
FROM products 
GROUP BY category_id;

카테고리별 상품 개수를 구하는 예시입니다.
GROUP BY는 하나의 컬럼을 기준으로 데이터를 묶어 통계를 낼 때 사용합니다.

✅ 날짜 기반 그룹화

SELECT DATE(created_at) AS reg_date, COUNT(*) AS user_count 
FROM users 
GROUP BY DATE(created_at)
ORDER BY reg_date DESC;

일자별 신규 가입자 수를 확인할 수 있습니다.
DATE()로 시간 정보 없이 날짜만 추출해 그룹화하는 방식은 실무에서 자주 사용됩니다.


📊 집계 함수 (Aggregate Functions)

함수 설명 예시
COUNT() 행의 개수를 셈 COUNT(*), COUNT(column)
SUM() 합계 SUM(price)
AVG() 평균 AVG(score)
MAX() 최댓값 MAX(created_at)
MIN() 최솟값 MIN(price)

🛠 실무 예제

✅ 1. 카테고리별 평균 상품 가격

SELECT category_id, AVG(price) AS avg_price 
FROM products 
GROUP BY category_id;

✅ 2. 회원 등급별 가입자 수

SELECT grade, COUNT(*) AS member_count 
FROM users 
GROUP BY grade;

✅ 3. 최근 일주일 간 요일별 가입자 수

SELECT DATE_FORMAT(created_at, '%W') AS day_of_week, COUNT(*) AS count 
FROM users 
WHERE created_at >= DATE_SUB(NOW(), INTERVAL 7 DAY)
GROUP BY day_of_week;

✅ 4. 월별 총 주문 금액

SELECT DATE_FORMAT(ordered_at, '%Y-%m') AS month, SUM(amount) AS total 
FROM orders 
GROUP BY month
ORDER BY month DESC;

⚠️ GROUP BY + WHERE 사용 시 주의

  • WHERE는 그룹화 이전에 필터링
  • HAVING은 그룹화 이후 조건 필터링

예:

-- 카테고리별 상품 개수가 10개 이상인 경우만 조회
SELECT category_id, COUNT(*) AS product_count
FROM products
GROUP BY category_id
HAVING product_count >= 10;

📚 다음 글 예고

다음 포스팅에서는 실무 중심 쿼리 활용법 시리즈로 넘어가,
👉 2-1. 조건부 COUNT와 SUM 쓰는 법 에 대해 정리합니다.


🏷️ 추천 태그

  • #MySQL
  • #GROUPBY
  • #ORDERBY
  • #집계함수
  • #SQL통계
  • #백엔드개발
728x90
반응형