PostgreSQL 跨表查询详解:使用tablefunc扩展创建透视表
本文将详细介绍如何在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
子句。CASE
和GROUP 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中文网其他相关文章!