数据透视函数
- 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('SELECT 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)