본문 바로가기

study/sql

집계 함수

집계 함수를 사용하면 집합의 개수, 합계 등의 데이터를 구할 수 있다. 집합은 함수의 인자로 지정한다.

집합에 대해 계산한다 해서 집계 함수라 부른다. 따라서 결과값으로는 하나의 행(집계의 결과)을 반환한다.

 

COUNT : 인수로 주어진 집합의 개수를 구해 반환한다. NULL 값은 제외한다.

SELECT COUNT(*) FROM sample; -> sample 테이블의 행의 개수를 구해 반환한다.

SELECT COUNT(*) FROM sample WHERE name='money'; -> name이 money인 행의 개수를 구해 반환한다.

no name
1 a
2 b
3 NULL

위와 같은 테이블이 있을 때, SELECT COUNT(no), COUNT(name) FROM sample; -> COUNT(no)는 3을 반환하지만, COUNT(name)에 대해선 2를 반환한다. NULL은 제외하기 때문이다.

 

DISTINCT : 중복된 값을 제거하는 함수. SELECT와 함께 사용한다. 컬럼 명 앞에 붙여 사용한다. 

 

no name
1 a
2 b
3 b
4 c
5 NULL

위 테이블을 보면 name 열에 b가 중복으로 있다.

SELECT name FROM sample; -> 모든 name 데이터를 가져온다. a,b,b,c,NULL

SELECT DISTINCT name FROM sample; -> 중복을 제거해서 가져온다. a,b,c,NULL

SELECT ALL name FROM sample; -> 모든 데이터를 가져온다. ALL은 안붙인 것이랑 같은 결과.

SELECT COUNT(ALL name), COUNT(DISTINCT name) FROM sample; -> 위 표에서 계산하면, 3과 2가 나올 것이다. NULL은 제외되기 때문에.


다른 집계 함수들.

 

SUM : 수치형 데이터들의 합을 반환하는 함수. 마찬가지로 NULL은 무시하고, 문자열형이나 날짜시간형 데이터는 구할 수 없다. EX) SELECT SUM(age) FROM sample;

AVG : 평균값을 구하는 함수. SUM(컬럼명) / COUNT(컬럼명) 와 같다. 만약 NULL이 있다면, CASE를 사용해 0으로 간주한 후에 계산할 수 있다. EX) SELECT AVG(age) FROM sample;

MIN, MAX : 최솟값, 최댓값을 구하는 함수. 이 함수들은 수치형뿐 아니라, 문자열형, 날짜시간형에도 사용할 수 있다.

EX) SELECT MIN(age), MAX(birthday) FROM sample;