- 합계, 평균, 개수, 최대값, 최소값 등의 계산을 위한 기능
- 집계함수를 사용 가능한 위치
-SELECT구,HAVING구,ORDER BY구- 집계함수는 1개의 값을 반환하는 것만 함께 사용 가능
- 상수, 집계함수, DISTINCT, 연산자 등
SELECT count(*) FROM book;
# NULL값은 제외
SELECT clientHobby FROM bookClient;
SELECT count(clientHobby) FROM bookClient;
- 출력

# 도서 테이블의 총 재고수량을 출력
SELECT sum(bookStock) FROM book;
SELECT sum(bookStock) AS 'sum of bookStock' FROM book;
SELECT sum(bookStock) AS '총재고량' FROM book;
# 도서 판매 테이블에서 총 주문수량을 출력
SELECT sum(bsQty) FROM bookSale;
# 고객번호 2인 고객이 주문한 도서의 총 주문수량 출력
SELECT sum(bsQty) AS '총주문수량'
FROM bookSale WHERE clientNo = '2';
SELECT clientNo, sum(bsQty) AS '총주문수량'
FROM bookSale WHERE clientNo = '2';
- 출력

# 최소주문량 출력
SELECT min(bsQty) AS '최소주문수량' FROM bookSale;
SELECT * FROM bookSale WHERE bsQty=1;
# 최대주문량 출력
SELECT max(bsQty) AS '최소주문수량' FROM bookSale;
SELECT * FROM bookSale WHERE bsQty=9;
# 최소/최대 주문량 함께 출력
SELECT min(bsQty), max(bsQty), sum(bsQty) FROM bookSale;
- 출력

SELECT min(bsQty) AS '최저주문량',
max(bsQty) AS '최고주문량',
sum(bsQty) AS '총주문량',
avg(bsQty) AS '평균주문량'
FROM bookSale;
# 한글별칭으로 사용시 따옴표 없이 사용가능(공백허용불가)
SELECT min(bsQty) AS 최저주문량,
max(bsQty) AS 최고주문량,
sum(bsQty) AS 총주문량,
avg(bsQty) AS 평균주문량
FROM bookSale;
- 출력

SELECT min(bsQty) AS 최저주문량,
max(bsQty) AS 최고주문량,
sum(bsQty) AS 총주문량,
avg(bsQty) AS 평균주문량
round(avg(bsQty)) as 평균주문량
FROM bookSale;
- 출력

- 그룹별 질의에 대한 결과 생성
SELECT 집약키, 집계함수(컬럼), ...
FROM 테이블명
GROUP BY 집약키컬럼
[HAVING 검색조건(필터링)조건]
집약키 : GROUP BY 에서 사용하는 컬럼
집약키에 따라 그룹화한 후 그룹별로 집계함수나 조건에 따른 질의결과 생성
주의: SELECT 구에는 1개의 값을 반환하는 상수, GROUP BY에서 사용한 집약키 컬럼, 집계함수만 나올 수 있음
HAVING 검색(필터링)조건은 반드시 GROUP BY 뒤에 위치, ORDER BY 뒤에 X
그룹별 연산 단계:
그룹별 데이터 분리 (split)
→ 집계함수나 그룹별 연산을 적용 (apply)
→ 그룹별 연산 결과를 통합 (merge)
-- 도서별 주문량 합계 출력
SELECT bookNo, sum(bsQty) AS '주문량합계'
FROM bookSale
GROUP BY bookNo;
- 출력

ORDER BY 기준을 열 번호로 지정 가능하다.-- 도서별 주문량 합계 합계순 정렬
SELECT bookNo, sum(bsQty) AS '주문량합계'
FROM bookSale
GROUP BY bookNo
ORDER BY 2; # 두번째 열(sum(bsQty) 순)
- 출력

ORDER BY 기준을 AS(Alias) 설정한 별칭으로도 사용 가능하다.SELECT bookNo, sum(bsQty) AS '주문량합계'
FROM bookSale
GROUP BY bookNo
ORDER BY 주문량합계 DESC; # 주문량합계(sum(bsQty)) 순
- 출력

ORDER BY 컬럼 에 따옴표(' ') 포함시 정렬이 적용되지 않는다.SELECT bookNo, sum(bsQty) AS '주문량합계'
FROM bookSale
GROUP BY bookNo
ORDER BY '주문량합계' DESC;
- 출력

- 그룹별 집계 뒤에 전체 요약정보 함께 제시
GROUP BY절 뒤에 사용
SELECT bookNo, sum(bsQty) AS '주문량합계'
FROM bookSale
GROUP BY bookNo
WITH ROLLUP; # 맨 뒤에 총계 출력
- 출력

SELECT bookNo, sum(bsQty) AS '주문량합계'
FROM bookSale
GROUP BY bookNo
WITH ROLLUP
ORDER BY 주문량합계;
HAVING검색조건(필터링)GROUP BY절에 의해 구성된 그룹들에 대해 적용할 조건 기술- 검색조건(필터링): 집계함수, 비교연산 주로 사용
GROUP BY없이 단독사용 불가WHERE절보다 뒤에 위치WHERE절: 개별 행 필터링HAVING절: 그룹(집계결과)별 필터링
-- 출판사별 가격이 25000원 이상인 도서 권수가 3 초과인 경우만 출력
SELECT pubNo, count(*) AS '도서수합계'
FROM book
WHERE bookPrice >= 25000
GROUP BY pubNo
HAVING count(*) > 3;
- 출력

group_concat() : 데이터 조회 결과를 한 줄로 결합 (구분자 기본값 콤마) # GROUP BY절에 대한 결과를 group_concat()을 사용
SELECT clientNo, group_concat(bookNo) AS 'bookID'
FROM bookSale
GROUP BY clientNo;
- 출력

group_concat(컬럼명 separator 구분자)SELECT clientNo, group_concat(bookNo separator ' ') AS 'bookID'
# , 대신 ' '(공백) 으로 구분자가 설정된 모습
FROM bookSale
GROUP BY clientNo;
- 출력
