제7절 GROUP BY, HAVING 절
1. 집계 함수(Aggregate Function)
- 그룹당 단 하나의 결과를 추출하는 함수
- GROUP BY 절은 행들을 소그룹화
- SELECT 절, HAVING 절, ORDER BY 절에 사용
집계 함수 | 사용 목적 |
COUNT(*) | NULL 값을 포함한 행의 개수 |
COUNT(컬럼1) | 컬럼1에서 NULL을 제외한 행의 개수 |
SUM(컬럼1) SUM(DISTINCT 컬럼1) |
컬럼1에서 NULL을 제외한 행의 합계 |
AVG(컬럼1) AVG(DISTINCT 컬럼1) |
컬럼1에서 NULL을 제외한 행의 평균 |
MAX(컬럼1) MAX(DISTINCT 컬럼1) |
컬럼1에서 최대값 (문자, 날짜도 사용가능) |
MIN(컬럼1) MIN(DISTINCT 컬럼1) |
컬럼1에서 최소값 (문자, 날짜도 사용가능) |
STDDEV(컬럼1) STDDEV(DISTINCT 컬럼1) |
컬럼1에서 행의 표준편차 |
VARIAN(컬럼1) VARIAN(DISTINCT 컬럼1) |
컬럼1에서 행의 분산 |
위와 같은 테이블에서 집계함수를 사용해 보겠습니다.
SELECT COUNT(*) AS ROW_N #전체 행의 개수
, COUNT(DISTINCT CustomerId) AS CustomerId_N #중복없는 고객ID의 개수
, SUM(Total) AS Total_SUM #Total의 합계
, AVG(Total) AS Total_AVG #Total의 평균
, MAX(Total) AS Total_MAX #Total의 최대값
, MIN(InvoiceDate) AS InvoiceDate_MIN #주문날짜의 최소값(가장 빠른날)
FROM Invoice
2. GROUP BY 절
- 그룹별로 데이터를 확인 할 때 사용
# GROUP BY 절 기본 구조
SELECT DISTINCT 컬럼1, 컬럼2 # 네번째 실행
FROM 테이블명 # 첫번째 실행
WHERE 조건 # 두번째 실행
GROUP BY 컬럼1, 컬럼2 # 세번째 실행
SELECT BillingCountry
, COUNT(Total) AS COUNT_Country # 국가별로 Total의 개수
, SUM(Total) AS SUM_Country # 국가별로 Total의 합계
, AVG(Total) AS AVG_Country # 국가별로 Total의 평균
FROM Invoice
WHERE BillingCountry IS NOT NULL # BillingCountry가 NULL이 아닌 행만 가져오기
GROUP BY BillingCountry # 국가별로 그룹만들기
3. HAVING 절
- WHERE절에서 사용할 수 없는 집계함수를 HAVING 절을 통해 사용가능
- GROUP BY 절 다음에 사용
SELECT BillingCountry
, COUNT(Total) AS COUNT_Country # 국가별로 Total의 개수
, SUM(Total) AS SUM_Country # 국가별로 Total의 합계
, AVG(Total) AS AVG_Country # 국가별로 Total의 평균
FROM Invoice
WHERE BillingCountry IS NOT NULL # BillingCountry가 NULL이 아닌 행만 가져오기
GROUP BY BillingCountry # 국가별로 그룹만들기
HAVING COUNT(Total) >= 10 # 국가별 Total의 개수가 10개 이상인 행만 추출
4. CASE 표현을 활용한 월별 데이터 집계
# 국가별 그룹화 된 데이터를 가지고 월별 데이터 추출하기
SELECT BillingCountry
, AVG(CASE OrderDate WHEN '2007-01' THEN Total END) '2007-01'
, AVG(CASE OrderDate WHEN '2007-02' THEN Total END) '2007-02'
, AVG(CASE OrderDate WHEN '2007-03' THEN Total END) '2007-03'
, AVG(CASE OrderDate WHEN '2007-04' THEN Total END) '2007-04'
, AVG(CASE OrderDate WHEN '2007-05' THEN Total END) '2007-05'
FROM Invoice
GROUP BY BillingCountry
'SQL > SQLD (개발자)' 카테고리의 다른 글
2-1. SQL 기본_(9)조인(JOIN) (0) | 2021.09.01 |
---|---|
2-1. SQL 기본_(8)ORDER BY 절 (0) | 2021.08.29 |
2-1. SQL 기본_(6)함수(FUNCTION) (0) | 2021.08.26 |
2-1. SQL 기본_(5)WHERE 절 (0) | 2021.08.25 |
2-1. SQL 기본_(4)TCL(TRANSACTION CONTROL LANGUAGE) (0) | 2021.08.24 |