更新时间:2025-05-29 GMT+08:00

数据透视函数

tablefunc()

描述:扩展接口,用于处理表数据,包括数据透视函数。仅系统管理员可以安装扩展。

需要安装扩展,默认安装到public schema,建议安装到用户schema,create extension tablefunc [schema {user_schema}]。扩展功能为内部使用功能,不建议用户使用。

crosstab(source_sql text [, N int])

描述:以source_sql的结果为源数据,产生一个数据透视表。

返回值类型:setof record

示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
gaussdb=# CREATE extension tablefunc;
CREATE EXTENSION
gaussdb=# CREATE TABLE cross_test(group_id text, id int, var text);
CREATE TABLE
gaussdb=# SELECT * FROM cross_test;
 group_id | id | var 
----------+----+-----
(0 rows)

gaussdb=# SELECT * FROM crosstab('SELECT group_id, var FROM cross_test order by 1, 2;') AS c(group_ text, cat1 text, cat2 text, cat3 text);
 group_ | cat1 | cat2 | cat3 
--------+------+------+------
(0 rows)

N是一个废弃参数,不影响函数结果。

crosstabN(source_sql text)

描述:以source_sql的结果为源数据,产生一个 "N+1" 列的数据透视表。crosstabN是一组函数,包括crosstab2、crosstab3、crosstab4。

返回值类型:setof tablefunc_crosstab_N。tablefunc_crosstab_N包括tablefunc_crosstab_2、tablefunc_crosstab_3、tablefunc_crosstab_4。

示例:

1
2
3
4
5
6
7
8
9
--crossbatN(source_sql text)中的N为2时,产生一个3列的数据透视表。
gaussdb=# CREATE extension tablefunc;
CREATE EXTENSION
gaussdb=# CREATE TABLE cross_test(group_id text, id int, var text);
CREATE TABLE
gaussdb=# SELECT * FROM crosstab2('SELECT group_id, var from cross_test ORDER BY 1, 2;');
 row_name | category_1 | category_2 
----------+------------+------------
(0 rows)

crosstab(source_sql text, category_sql text)

描述:以source_sql的结果为源数据,根据category_sql的结果分类,产生一个数据透视表。

返回值类型:setof record

示例:

1
2
3
4
5
6
7
8
gaussdb=# CREATE extension tablefunc;
CREATE EXTENSION
gaussdb=# CREATE TABLE cross_test(group_id text, id int, var text);
CREATE TABLE
gaussdb=# SELECT * FROM crosstab('SLECT group_id, var FROM cross_test order by 1, 2;', 'SELECT generate_series(1, 4)') AS c(group_ text, cat1 text, cat2 text, cat3 text, cat4 text);
 group_ | cat1 | cat2 | cat3 | cat4 
--------+------+------+------+------
(0 rows)