본문 바로가기

MSSQL/T-SQL

SELECT절 집계 함수

집계 함수

 

Gravity DBA 이승연

 

집계 함수는 우리가 깊게 설명을 하지 않아도 많이 친숙한 함수 입니다. 예를 들어서 총합을 구하여라또는 평균을 구하여라또 다른 예로는 최대 큰 값을 구하여라’ ‘최소값을 구하여라등등 우리가 쉽게 접해보았던 함수 들입니다.

 

집계 함수를 나열해 보자면 아래와 같습니다.

 

l  AVG

l  CHECKSUM_AGG

l  COUNT

l  COUNT_BIG

l  GROUPING

l  MAX

l  MIN

l  SUM

l  STDEV

l  STDEVP

l  VAR

l  VARP

 

우리는 이중에 COUNT, AVG, MAX, MIN, SUM등을 간략하게 살펴보겠습니다. 다른 함수들은 BOL (Books Online)을 참고하시면 될 것 같습니다.

 

COUNT()는 무엇이냐? COUNT를 영어사전에서 찾아보면 세다, 계산하다, 셈에 넣다, 포함시키다이런 뜻을 가지고 있는 단어로 검색이 되고 있습니다. SQL에서도 영어사전과 같은 의미로 해석하시면 될 것 같습니다.

SELECT count(*) FROM [테스트] 이와 같은 T-SQL문이 존재하면 이 T-SQL문은 다음과 같이 해석 하시면 될 것 같습니다.

 

“[테스트] 테이블의 모든 행의 개수를 세어라.”

 

하지만, 우리는 여기서 COUNT()함수 도중 주의점을 알아야 합니다. COUNT(*) COUNT(column)의 차이점을 숙지하고 있어야 나중에 잘못된 수치로 당황하지 않을 것 입니다. 한가지 예를 들어 보겠습니다.

 

CREATE TABLE #t1 (c1 int NULL);

 

INSERT INTO #t1 DEFAULT VALUES

INSERT INTO #t1 DEFAULT VALUES

INSERT INTO #t1 DEFAULT VALUES

INSERT INTO #t1 VALUES (1)

 

SELECT count(*), count(c1) FROM #t1

 

T-SQL 문의 count(*) count(c1)는 수치상으로 차이가 발생을 합니다. 왜 발생을 하게 될까요? Count()함수를 사용할 때 count()의 함수의 기본은 NULL값을 무시하지 않고 하나의 행으로 간주하기 때문입니다. 그래서 count(*)는 수치가 4가 나오게 되며, count(c1) NULL값을 무시한 1이 나오게 되는 것 입니다.

 

AVG Average의 약자로써 평균을 내다라는 뜻을 가지고 있는 단어 입니다. 단어의 뜻과 동일하게 AVG()함수는 평균을 구하는 함수 입니다. 위 예제를 조금 변경하여 예를 들어보겠습니다.

 

CREATE TABLE #t1 (c1 int NULL);

 

INSERT INTO #t1 VALUES (1)

INSERT INTO #t1 VALUES (2)

INSERT INTO #t1 VALUES (3)

INSERT INTO #t1 VALUES (4)

INSERT INTO #t1 VALUES (5)

INSERT INTO #t1 VALUES (6)

INSERT INTO #t1 VALUES (7)

INSERT INTO #t1 VALUES (8)

INSERT INTO #t1 VALUES (9)

INSERT INTO #t1 VALUES (10)

 

SELECT AVG(c1) FROM #t1

 

의 결과값은 5 입니다. (1+2+3+4+5+6+7+8+9+10) / 10 = 5 가 되는 것입니다. 뒤 에서 배우게 될 SUM()함수와 COUNT()함수를 사용하게 되는 것 입니다.

 

SELECT AVG(c1) FROM #t1

SELECT SUM(c1) / COUNT(c1) FROM #t1

 

이 두 T-SQL문은 같은 결과값을 출력하지만 후자의 SUM()함수와 COUNT()함수를 혼합하여 사용한 T-SQL 문법은 실무에서 사용을 하지 않을 것 같습니다. 가독성이 좋은 AVG()를 나두고 SUM()함수와 COUNT()를 혼합하여 사용할 이유는 없을 것 같습니다.

 

SUM()함수는 위에서 언급했듯이 총계를 구하는 함수입니다. 위 예제에서 언급을 하였기에 SUM()함수는 따로 예제를 만들어서 보여 들이지는 않겠지만, SUM()함수를 사용할 때 주의 점은 가끔씩 INT형을 SUM()함수를 사용하여 총계를 구할 때 뜻하지 않게 오버플로우(overflow)가 발생을 할 수 있습니다. 이 점을 주의 하시면서 오버플로우가 발생을 할 것 같으면, SUM()함수를 사용하기 전에 형변환을 한 후에 SUM()을 사용하면 오버플로우를 방지 할 수 있습니다.

 

MIN()함수와 MAX()함수를 보겠습니다. MIN()함수는 Minimum의 약자로써 최소 또는 최저라는 뜻을 가지고 있고, MAX()함수는 최대의 최고의 뜻을 가지고 있는 함수 입니다. 뜻에서도 알 수 있듯이 MIN()함수는 최소값을 추출하는 것이고, MAX()함수는 최대값을 추출하는 것 입니다. 위 예제 테이블을 이용하여 간단하게 살펴 보겠습니다.

 

SELECT max(c1) FROM #t1

SELECT min(c1) FROM #t1

 

MAX(c1)함수의 결과값은 10이며, MIN(c1)함수의 결과값은 1 입니다.

 

집계함수는 우리가 너무나도 자주 사용하는 함수이기에 각 함수들이 어떤 동작을 하며, 어떤 상황에 써야 하는지 숙지하고 사용하면 좋을 것 같습니다.


----------------------------------------------------------
DBA 이승연
GRAVITY co., Ltd 
Global Business Dept / Tech Support

http://www.gravity.co.kr
http://www.ddoung2.com
----------------------------------------------------------

'MSSQL > T-SQL' 카테고리의 다른 글

UNION에 대하여  (0) 2009.04.28
GROUP BY에 대하여  (0) 2009.04.28
SQL에서의 관계대수  (0) 2009.04.28
데이터형식 우선 순위  (0) 2009.03.27
모든테이블 삭제하기  (1) 2009.03.27