首页 >数据库 >mysql教程 >如何使用'crosstab()”函数在 PostgreSQL 中创建交叉表查询?

如何使用'crosstab()”函数在 PostgreSQL 中创建交叉表查询?

Barbara Streisand
Barbara Streisand原创
2025-01-25 11:11:09282浏览

PostgreSQL 交叉表查询:使用 crosstab() 函数创建交叉表

PostgreSQL 的交叉表查询可以将数据转换为更易于阅读的表格格式,其中值按类别分组,行代表不同的属性值。可以使用 tablefunc 模块中的 crosstab() 函数创建交叉表查询。

改进的测试用例

考虑以下表格:

<code>Section    Status    Count
A          Active    1
A          Inactive  2
B          Active    4
B          Inactive  5
C          Inactive  7</code>

我们希望创建一个交叉表查询,返回以下表格:

<code>Section    Active    Inactive
A          1         2
B          4         5
C          NULL         7</code>

安全形式

要创建此交叉表查询,可以使用 crosstab() 的双参数形式:

<code class="language-sql">SELECT *
FROM   crosstab(
   'SELECT section, status, ct
    FROM   tbl
    ORDER  BY 1,2'  -- 也可以只写 "ORDER BY 1"

  , $$VALUES ('Active'::text), ('Inactive')$$
   ) AS ct ("Section" text, "Active" int, "Inactive" int);</code>

这种形式是“安全的”,因为它确保每个属性都分配到其专用的列,即使存在多余的输入行。在本例中,Section C 的值填充到 Inactive 列中,但 Active 列保持 NULL。

处理多余的输入行

crosstab() 的两种形式对多余的输入行的处理方式不同。单参数形式从左到右填充可用的值列,丢弃多余的值。双参数形式将每个输入值分配到其专用的列,覆盖任何先前的分配。

高级示例

交叉表查询可用于各种高级场景,例如:

  • 多列透视
  • 使用动态替代方案(例如 CASE 和 GROUP BY)进行透视

psql 中的 crosstabview

PostgreSQL 9.6 在其交互式终端 psql 中引入了 crosstabview 元命令。它允许您运行交叉表查询并以表格格式显示结果。

<code class="language-sql">db=> SELECT section, status, ct FROM tbl \crosstabview</code>

How to Create Crosstab Queries in PostgreSQL Using the `crosstab()` Function?

以上是如何使用'crosstab()”函数在 PostgreSQL 中创建交叉表查询?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn