집계 함수
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 |