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
반응형
'DB 데이터 > MySQL 기본기 & 문법 정리' 카테고리의 다른 글
WHERE 절과 연산자 정리 (0) | 2025.04.23 |
---|---|
CREATE, INSERT, SELECT 문 기초 (0) | 2025.04.23 |
기본 데이터 타입 정리 (INT, VARCHAR, DATE 등) (0) | 2025.04.22 |
MySQL이란? 설치부터 CLI/GUI 환경까지 (1) | 2025.04.22 |