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()
的两种形式对多余的输入行的处理方式不同。单参数形式从左到右填充可用的值列,丢弃多余的值。双参数形式将每个输入值分配到其专用的列,覆盖任何先前的分配。
高级示例
交叉表查询可用于各种高级场景,例如:
psql 中的 crosstabview
PostgreSQL 9.6 在其交互式终端 psql 中引入了 crosstabview
元命令。它允许您运行交叉表查询并以表格格式显示结果。
<code class="language-sql">db=> SELECT section, status, ct FROM tbl \crosstabview</code>
以上是如何使用'crosstab()”函数在 PostgreSQL 中创建交叉表查询?的详细内容。更多信息请关注PHP中文网其他相关文章!