본문 바로가기
DB

[MySQL] 집계함수 ( MAX, MIN, SUM, AVG, COUNT )

by person456 2024. 4. 14.
함수 기능 예시
MAX 최대값 select MAX(COL1) from dual;
MIN 최소값 select MIN(COL1) from dual;
AVG 평균값 selcet AVG(COL1) from dual;
SUM 합계 select SUM(COL1) from dual;
COUNT(COL) 개수(NULL 미포함) select COUNT(COL1) from dual;
COUNT(*) 개수(NULL 포함) select COUNT(*) from dual;

 

 

 

- MySQL에서 제공하는 sakila 데이터베이스에서 payment 테이블을 조회하였을 때 나오는 화면

payment_id : 기본키, Auto Increment
customer_id : 외래키, 대여한 고객의 id
staff_id : 외래키, 해당 렌탈을 담당하는 스태프의 id
rental_id : 외래키, rental table의 PK
payment : rental 비용

 

1. MAX

SELECT MAX(amount)
FROM payment;

 

MAX 함수

 

2. MIN

SELECT MIN(amount)
FROM payment;

 

MIN 함수

 

3. SUM

SELECT SUM(amount)
FROM payment;

SUM 함수

 

4. AVG

SELECT AVG(amount)
FROM payment;

AVG 함수

 

5. COUNT

SELECT COUNT(amount)
FROM payment;

 

 

** 주의사항

해당 집계 함수들은 Group By 되어있지 않은 Column과 함께 Select될 경우 에러를 유발함

MAX, MIN, SUM, AVG, COUNT는 모두 전체 ROW에 대한 집계를 나타낸 이후 하나의 ROW만을 반환하는데,

이 때 Group으로 설정되는 Row는 테이블 전체이기 때문임.

따라서 만약

SELECT COUNT(*), customer_id
FROM payment;

이라는 SQL문을 실행한다면 COUNT는 테이블 전체를 그룹으로 묶어 1개의 Row만을 반환하지만,

customer_id는 각각의 행에 대한 결과를 row로 반환하기 때문에 1140 에러가 발생함

1140 에러

이를 해결하기 위해서는 select되는 두 Colmun의 그룹을 통일시켜줄 필요가 있음

SELECT COUNT(amount), customer_id
FROM payment
GROUP BY customer_id;

이렇게 SQL문을 작성해준다면 SELECT되는 2개의 Column이 하나의 그룹으로 묶이기 때문에

Count는 그룹별 개수를 반환하여 다음과 같은 결과가 나옴