database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
ㆍPostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
PostgreSQL Tutorials 3623 게시물 읽기
 News | Q&A | Columns | Tutorials | Devel | Files | Links
No. 3623
AGGREGATE funciton 함수 이용시 간단한 tip
작성자
정재익(advance)
작성일
2001-11-07 03:16
조회수
4,820

aggregate 함수라는 것은 data 를 group by 구문에 의해 grouping 을 시행한후 그 그룹에 대해서 특정 값을 구하고자 할때 사용할수 있는 함수들입니다. 주로 많이 사용하는 aggregate 함수로는 다음과 같은 것들이 있습니다.

 

AVG(expression) : 산술 평균을 구한다.

COUNT(*) : 입력값의 갯수

COUNT(expression) : expression 이 NULL 이 아닌 입력값의 갯수

MAX(expression) : expression 의 최대값

MIN(expression) : expression 의 최소값

STDDEV(expression) : expression 의 표준편자

SUM(expression) : expression 의 합

VARIANCE(expression) : expression 의 분산 (STDDEV 값의 제곱값)

 

여기까지는 일반적인 aggregate 함수를 설명한 것이고, aggregate 함수를 이용하다보면 항상 겪게 되는 문제는 NULL 인 필드의 처리입니다. 평균을 구할때 NULL 인 필드를 추가해서 구할것인가 아니면 NULL 인 필드는 빼고 할 것인가? 이런 문제는 고민거리가 됩니다. 이때 알아 둬야 할 것은 aggregate 함수에는 NULL 인 값은 항상 제외시킨다는 점입니다. 만약 이 NULL 인 값을 포함시키고 싶다면 CASE 구문을 이용하여 NULL 인 필드의 값을 0으로 변경해 줘야 합니다. 그리고 다음과 같은 modifier 에 대해서 알아두면 보다 편리하게 aggregate 함수를 이용할수 있습니다.

 

aggregate_name (expression)

aggregate_name (ALL expression)

aggregate_name (DISTINCT expression)

aggregate_name ( * )

 

제일 처음 구문은 expression 이 NULL 이 아닌 모든 row 들에 대해서 aggregate 함수를 적용시켜 줍니다. 즉 where 절에 NOT NULL 을 명시해 준것과 같은 효과가 나타나겠지요.

두번째 구문은 첫번째 구문과는 같은 효과를 나타냅니다. ALL 이라는 modifier 가 기본값으로 동작하기 때문입니다.

세번째 구문은 expression 이 NULL 이 아닌 모든 값들에 대해서 오로지 한종류의 값들만에 대해서 aggregate 함수를 동작시킵니다. 이것의 의미 파악이 힘들것이라고 생각하는데, SELECT DISTINCT ... 구문을 떠올리시면 쉽게 이해가 갈 것으로 생각됩니다. 즉 distinct non-NULL 값을 가지는 expression 에 대해서만 aggregate 함수를 적용시켜 준다는 것입니다.

마지막 네번째 구문은특별한 입력값이 명시되지 않기 때문에 각각의 row 값이 NULL 이든 아니든 상관없이 모두에 적용을 시킵니다. 주로 COUNT() aggregate 함수에 대해서 많이 이용하게 됩니다.

 

예제
================

dsn=# \d t
           Table "t"
 Attribute |  Type   | Modifier 
-----------+---------+----------
 a         | integer | 
 b         | text    | 

dsn=# select * from t; -- 공란은 값이 NULL 이다. 0과 NULL 이 다르다는 것 명심
 a  | b 
----+---
  1 | a
  2 | a
    | a
 12 | a
  5 | b
 10 | b
    | b
  0 | b
 15 | b
 21 | b
  5 | b
(11 rows)

dsn=# select b,sum(a) from t group by b; 
 b | sum 
---+-----
 a |  15
 b |  56
(2 rows)

dsn=# select b,sum(distinct a) from t group by b;
 b | sum 
---+-----
 a |  15
 b |  51
(2 rows)

dsn=# select b,sum(a),count(*) from t group by b;         
 b | sum | count 
---+-----+-------
 a |  15 |     4
 b |  56 |     7
(2 rows)

dsn=# select b,avg(all a) from t group by b;     
 b |     avg      
---+--------------
 a | 5.0000000000
 b | 9.3333333333
(2 rows)

dsn=# select b,avg(distinct a) from t group by b;   
 b |      avg      
---+---------------
 a |  5.0000000000
 b | 10.2000000000
(2 rows)
[Top]
No.
제목
작성자
작성일
조회
3782Simple Connection to PostgreSQL Using PHP
정재익
2001-12-25
4005
3775AuthPG: 아파치-포스트그레스 인증 모듈 [1]
정재익
2001-12-25
3787
3773PostgreSQL의 JDBC 활용하기
정재익
2001-12-25
5660
3623AGGREGATE funciton 함수 이용시 간단한 tip
정재익
2001-11-07
4820
3577PostgreSQL 설치하기
정재익
2001-10-24
11892
3573Optimizing PostgreSQL [1]
정재익
2001-10-22
7432
3561Windows 용 PostgreSQL 의 설치 방법 [2]
정재익
2001-10-21
7218
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2020 DSN, All rights reserved.
작업시간: 0.041초, 이곳 서비스는
	PostgreSQL v13.0으로 자료를 관리합니다