SQL 문법이나 변수에 헷갈리기 전에, 집계 함수가 모든 걸 세고 계산할 때 최고의 친구라는 걸 기억하자. 이 함수들은 전체 데이터에서 합계, 평균 등 요약 정보를 뽑아내는 마법 같은 역할을 해줘.
집계 함수는 여러 행을 묶어서 수학 연산을 할 때 써. 대표적인 함수들은:
SUM(): 값들의 합계를 구해.AVG(): 평균값을 계산해.COUNT(): 결과에서 행의 개수를 세어.
집계 함수는 데이터가 많을 때 요약 리포트 만들 때 진짜 유용해. 예를 들어 주문이 몇 개인지, 전체 금액이 얼마인지, 오늘 가장 큰 결제가 얼마였는지 등등. 몇 가지 집계 함수 예시를 같이 볼까?
행 개수 세기: COUNT() 함수
COUNT() 함수는 테이블에서 행의 개수를 세는 데 써. 예시로 어떻게 쓰는지 볼게.
-- 주문 테이블에서 전체 행 개수 세기
SELECT COUNT(*) AS total_orders
FROM orders;
-- 유니크한 고객 수 세기
SELECT COUNT(DISTINCT customer_id) AS unique_customers
FROM orders;
-- 금액이 100보다 큰 주문 개수 세기
SELECT COUNT(*) AS high_value_orders
FROM orders
WHERE total_amount > 100;
COUNT() 함수는 레코드 개수, 유니크 값 개수, 그리고 필터랑 같이 써서 "파이썬 강좌에 등록한 학생 수" 같은 것도 쉽게 셀 수 있어.
합계 구하기: SUM() 함수
SUM() 함수는 컬럼 값들의 합계를 구해. 이제 고객들의 전체 구매 금액을 계산해보자.
-- 전체 매출 합계 구하기
SELECT SUM(total_amount) AS total_revenue
FROM orders;
-- 특정 고객의 구매 합계
SELECT SUM(total_amount) AS customer_spending
FROM orders
WHERE customer_id = 101;
-- 카테고리별 주문 합계
SELECT category, SUM(total_amount) AS category_revenue
FROM orders
GROUP BY category;
SUM()은 매출, 수익, 기타 합계 분석에 필수야. 예를 들어 지난달 비즈니스 센터의 수익이 궁금하다면? 이 함수로 바로 알 수 있어.
평균값 구하기: AVG() 함수
AVG() 함수는 데이터 집합의 평균값을 구해줘. 예를 들어 학생들의 평균 점수나 고객의 평균 결제 금액 같은 거 말이야.
-- 주문의 평균 금액
SELECT AVG(total_amount) AS average_order_value
FROM orders;
-- 카테고리별 주문 평균 금액
SELECT category, AVG(total_amount) AS average_order_value
FROM orders
GROUP BY category;
-- 최근 7일간 고객 평균 결제 금액
SELECT AVG(total_amount) AS avg_check_last_week
FROM orders
WHERE order_date >= NOW() - INTERVAL '7 days';
평균값은 서비스 품질 분석, 이상치 찾기, 고객당 평균 이익 같은 핵심 지표 계산에 좋아.
분석에서 집계 함수 활용하기
이제 주요 함수들을 알았으니, 이걸로 기본 분석 리포트를 어떻게 만드는지 볼까?
예시 1: 전체 매출과 주문 개수
이번엔 한 달 동안 주문이 몇 개나 들어왔고, 전체 매출이 얼마인지 알고 싶다고 해보자.
SELECT
COUNT(*) AS total_orders,
SUM(total_amount) AS total_revenue
FROM orders
WHERE order_date >= '2023-10-01' AND order_date <= '2023-10-31';
예시 2: 카테고리별 평균 매출
이번엔 상품 카테고리별로 매출을 나눠서 보고 싶을 때는?
SELECT
category,
COUNT(*) AS total_orders,
SUM(total_amount) AS total_revenue,
AVG(total_amount) AS avg_order_value
FROM orders
GROUP BY category;
예시 3: 최근 7일간 주문 분석
짧은 기간, 예를 들어 최근 일주일 동안의 지표를 분석해야 할 때도 많아.
SELECT
COUNT(*) AS orders_last_week,
SUM(total_amount) AS revenue_last_week,
AVG(total_amount) AS avg_check_last_week
FROM orders
WHERE order_date >= NOW() - INTERVAL '7 days';
실전 케이스와 구체적인 과제
과제: 지역별 판매 분석
네가 매장 체인 사장이라고 치고, 지역별로 매출이 어떻게 분포됐는지 분석하고 싶다고 해보자.
SELECT
region,
COUNT(*) AS total_orders,
SUM(total_amount) AS total_revenue,
AVG(total_amount) AS average_order_value
FROM orders
GROUP BY region
ORDER BY total_revenue DESC;
과제: 매출 상위 10명 고객 찾기
이번엔 전체 주문 금액 기준으로 상위 10명의 고객을 뽑아보자.
SELECT
customer_id,
SUM(total_amount) AS total_spending
FROM orders
GROUP BY customer_id
ORDER BY total_spending DESC
LIMIT 10;
과제: 요일별 매출 비교
네 비즈니스가 요일별로 언제 가장 돈을 많이 버는지 궁금해? 이런 식으로 해볼 수 있어:
SELECT
TO_CHAR(order_date, 'Day') AS day_of_week,
SUM(total_amount) AS total_revenue,
AVG(total_amount) AS avg_order_value
FROM orders
GROUP BY TO_CHAR(order_date, 'Day')
ORDER BY total_revenue DESC;
GO TO FULL VERSION