GaussDB-数据透视函数

82 阅读2分钟

GaussDB-数据透视函数

  • tablefunc()

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

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

  • crosstab(source_sql text [, N int])

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

    返回值类型:setof record

    示例:

    | ``` 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)

    | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
    
    ![](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/9302ba3d27b44839a4673b9335da0fdd~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAgamVycnl3YW5nMTk4Mw==:q75.awebp?rk3s=f64ab15b&x-expires=1771822219&x-signature=nh%2Fn7bvU0%2BCEHKIMvXVffMqyhws%3D)
    
    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。

    示例:

    | ``` --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

    示例:

    | ``` 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)

    | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
    

更多详情请参考GaussDB 文档中心:doc.hcs.huawei.com/db/zh-cn/ga…