COUNT 이외의 집계함수

SUM, AVG, MIN, MAX 함수가 있다.

 

1. SUM으로 합계 구하기

SUM 집계함수는 수치형(숫자)만 계산할 수 있다. 문자열형이나 날짜시간형은 계산 불가능하다.

COUNT와 마찬가지로 NULL 값은 무시한다.

SELECT SUM(quantity) FROM sample51;

 

2. AVG로 평균 내기

AVG 집계함수도 수치형만 계산 가능하다.

SELECT AVG(quantity), SUM(quantity)/COUNT(quantity) FROM sample51;

직접 SUM과 COUNT를 이용해 평균을 구할수도 있지만, AVG로 간단하게 평균을 구할 수 있다.

 

 

AVG 집계함수도 NULL을 무시하기 때문에, 만약 NULL을 0으로 간주해서 평균을 내고 싶으면

CASE로 NULL을 0으로 변환한 뒤에 AVG 함수로 계산하면 된다.

SELECT AVG(CASE WHEN quantity IS NULL THEN 0 ELSE quantity END)
AS avgnull0 FROM sample51;

 

3. MIN, MAX로 최솟값, 최댓값 구하기

MIN 집계함수와 MAX 집계함수를 사용해 집합에서 최댓값과 최솟값을 구할 수 있다.

이 두 함수는 문자열형과 날짜시간형에도 사용할 수 있다.

NULL 값은 역시 무시한다.

SELECT MIN(quantity), MAX(quantity), MIN(name), MAX(name) FROM sample51;

 

그룹화 - GROUP BY

SYNTAX)

SELECT * FROM 테이블명 GROUP BY 열1, 열2, ...

지정된 열의 값이 같은 행이 하나의 그룹으로 묶인다.

 

 

1. GROUP BY로 그룹화

DISTINCT와 같이 중복을 제거하는 효과가 있음.

 

GROUP BY 구를 지정하는 경우에는 집계함수와 사용하지 않으면 큰 의미가 없음.

GROUP BY 구로 그룹화된 각각의 그룹이 하나의 집합으로서 집계함수의 인수로 넘겨지기 때문이다.

 

SELECT name, COUNT(name), SUM(quantity) FROM sample51 GROUP BY name;

GROUP BY name에 의해 name의 열 값이 A, B, C, NULL 4개의 그룹으로 나뉘어진다.

A 그룹에는 2개의 행이 있으므로 COUNT 값은 2가 된다.

A 그룹에 해당하는 2개 행의 quantity 열 값은 각각 1과 2이므로 SUM의 결과 3을 반환했다.

 

 

실제 GROUP BY를 사용하는 경우는

매출 실적에서 각 점포별, 상품별, 월별, 일별 등 특정 단위로 집계할 때 GROUP BY를 자주 사용한다.

매출 실적을 조사하는 동시에 SUM 집계함수로 합계를 낼 수 있으며, COUNT로 건수를 집계하는 경우도 있다.

 

 

2. HAVING 구로 조건 지정

다음 SQL문은 에러가 발생한다.

SELECT name, COUNT(name) FROM sample51 WHERE COUNT(name) = 1 GROUP BY name;

집계함수(예시의 경우 COUNT 함수)는 WHERE 구의 조건식에서 사용할 수 없다.

내부처리 순서에서 WHERE 구가 GROUP BY 구보다 앞서기 때문이다.

 

 

내부처리순서)

WHERE 구 -> GROUP BY 구 -> HAVING 구 -> SELECT 구 -> ORDER BY 구

(그리고 내부처리 순서를 고려하면, SELECT 구 보다 먼저 처리되는 구에서는 별명을 사용할 수 없게 된다) 

 

따라서 SELECT 명령에 있는 HAVING 구를 사용하여 집계함수를 사용해 조건식을 지정해야 한다.

SELECT name, COUNT(name) FROM sample51 GROUP BY name HAVING COUNT(name) = 1;

 

3. 복수열의 그룹화

GROUP BY에 지정한 열 이외의 열은 집계함수를 사용하지 않은 채 SELECT구에 기술해서는 안 된다.

 

그룹마다 하나의 값을 반환해야 하므로, 지정한 열이 집계함수를 사용해 하나의 값을 반환하지 않게 되면 에러가 발생한다.

다음과 같이 집계함수를 이용해 GROUP BY에 지정한 열 이외의 열(no, quantity)도 하나의 값을 반환한다면 실행 가능하다.

 

 

4. 결괏값 정렬

ORDER BY 구를 지정해 집계 결과를 정렬할 수 있다.

SELECT name, COUNT(name), SUM(quantity) FROM sample51 GROUP BY name ORDER BY SUM(quantity) DESC;

 

+ Recent posts