首页 > 数据库 > mysql教程 > 如何使用 tablefunc 扩展在 PostgreSQL 中创建交叉表查询?

如何使用 tablefunc 扩展在 PostgreSQL 中创建交叉表查询?

Mary-Kate Olsen
发布: 2025-01-25 11:02:08
原创
748 人浏览过

PostgreSQL 跨表查询详解:使用tablefunc扩展创建透视表

How to Create Crosstab Queries in PostgreSQL Using the tablefunc Extension?

本文将详细介绍如何在PostgreSQL中使用tablefunc扩展创建跨表查询(Crosstab Queries),实现数据的透视表转换。

创建跨表查询

跨表查询能够将数据转换为表格格式,其中行代表类别,列代表值。PostgreSQL 通过tablefunc扩展实现此功能。

双参数跨表查询语法:

<code class="language-sql">SELECT *
FROM crosstab(
  'SELECT row_name, category, value
   FROM base_table
   ORDER BY 1, 2',
  'SELECT DISTINCT attribute FROM base_table ORDER BY 1',
) AS ct (row_name text, column_1 type_1, ..., column_n type_n);</code>
登录后复制

处理缺失属性:

如果基础表中存在缺失属性,可以使用第二个参数指定跨表中要包含哪些属性。缺失属性的值将为空。

处理多余输入行:

  • 单参数形式: 多余行将被丢弃,较早的行优先。
  • 双参数形式: 较晚的行将覆盖同一类别和属性组合的现有值。

高级跨表查询:

  • 多列透视: 在第一个参数查询中使用多个ORDER BY子句。
  • 动态透视替代方案: 使用CASEGROUP BY语句。

在psql中使用 crosstabview (PostgreSQL 9.6及以上版本):

在psql中使用crosstabview元命令执行跨表查询:

<code class="language-sql">\crosstabview</code>
登录后复制

示例查询:

考虑以下示例表:

<code class="language-sql">Section    Status    Count
A          Active    1
A          Inactive  2
B          Active    4
B          Inactive  5</code>
登录后复制

要创建一个以Section为行,Status为列的跨表:

<code class="language-sql">SELECT *
FROM crosstab(
  'SELECT section, status, COUNT(*) FROM tbl GROUP BY 1, 2',
  'SELECT DISTINCT status FROM tbl ORDER BY 1',
) AS ct (Section text, Active int, Inactive int);</code>
登录后复制

结果:

<code>Section    Active    Inactive
A          1         2
B          4         5</code>
登录后复制

以上是如何使用 tablefunc 扩展在 PostgreSQL 中创建交叉表查询?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板