함수 | 기능 | 예시 |
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;
2. MIN
SELECT MIN(amount)
FROM payment;
3. SUM
SELECT SUM(amount)
FROM payment;
4. AVG
SELECT AVG(amount)
FROM payment;
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 에러가 발생함
이를 해결하기 위해서는 select되는 두 Colmun의 그룹을 통일시켜줄 필요가 있음
SELECT COUNT(amount), customer_id
FROM payment
GROUP BY customer_id;
이렇게 SQL문을 작성해준다면 SELECT되는 2개의 Column이 하나의 그룹으로 묶이기 때문에
Count는 그룹별 개수를 반환하여 다음과 같은 결과가 나옴
'DB' 카테고리의 다른 글
[MySQL] 날짜 함수 (DATE_FORMAT, ADDDATE 등 ) (0) | 2024.04.16 |
---|---|
[MySQL] SubQuery (서브쿼리) (0) | 2024.04.15 |
[MySQL] Join, 조인( Inner Join, Outer Join ) (0) | 2024.04.13 |
[MySQL] Index, View ( 인덱스, 뷰 ) (0) | 2024.04.13 |
[MySQL] DDL, 데이터 정의어(Data Definition Language) (0) | 2024.04.13 |