집계
테이블을 표현 할 때 흔히 격자형 형태로 표현하기를 원하는 경우들이 있다.
이런
경우 엑셀에서는 pivot 이라는 기능을 이용한다.
데이터베이스에서도
비슷한 상황이 존재할 수 있는데, 이를 위해서 DBMS마다
약간씩 다른 방법을 제공한다. Postgresql 의 경우는 아래와 같은 방법을 제공한다.
-- crosstab 을 이용하기 위한extension 설치
edb=# CREATE EXTENSION tablefunc;
CREATE EXTENSION
edb=#
edb=# CREATE TABLE t (Section CHAR(1), Status VARCHAR(10), Count integer);
CREATE TABLE
edb=#
edb=#
edb=# INSERT INTO t VALUES ('A', 'Active', 1);
INSERT 0 1
edb=# INSERT INTO t VALUES ('A', 'Inactive', 2);
INSERT 0 1
edb=# INSERT INTO t VALUES ('B', 'Active', 4);
INSERT 0 1
edb=# INSERT INTO t VALUES ('B', 'Inactive', 5);
INSERT 0 1
edb=#
edb=#
edb=# select * from t;
section | status | count
---------+----------+-------
A | Active
| 1
A | Inactive | 2
B | Active
| 4
B | Inactive | 5
(4 rows)
edb=# SELECT row_name AS Section,
edb-# category_1::integer AS Active,
edb-# category_2::integer AS Inactive
edb-# FROM crosstab('select section::text, status, count::text from t',2)
edb-#
AS ct (row_name text, category_1 text, category_2 text);
section | active | inactive
---------+--------+----------
A | 1
| 2
B | 4
| 5
(2 rows)
참고)