更新时间: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) |
父主题: 函数和操作符