首页 > 数据库 > mysql教程 > 如何使用'crosstab()”在 PostgreSQL 中高效创建动态数据透视表?

如何使用'crosstab()”在 PostgreSQL 中高效创建动态数据透视表?

Linda Hamilton
发布: 2025-01-20 22:51:09
原创
822 人浏览过

How Can I Efficiently Create Dynamic Pivot Tables in PostgreSQL Using `crosstab()`?

使用CASE和GROUP BY语句实现动态透视表的更高效方法

相比于文中提供的查询,使用tablefunc扩展中的crosstab()函数是一种更高效的替代方案。

安装:

首先,如果尚未安装tablefunc扩展,请安装:

CREATE EXTENSION tablefunc;
登录后复制

基本的Crosstab解决方案:

针对此场景的简单crosstab解决方案:

SELECT * FROM crosstab(
  'SELECT bar, 1 AS cat, feh
   FROM tbl_org
   ORDER BY bar, feh')
AS ct (bar text, val1 int, val2 int, val3 int);
登录后复制

合成类别列:

如果没有实际的类别列,可以使用窗口函数创建一个合成类别列:

SELECT * FROM crosstab(
   $$
   SELECT bar, val, feh
   FROM  (
      SELECT *, 'val' || row_number() OVER (PARTITION BY bar ORDER BY feh) AS val
      FROM tbl_org
      ) x
   ORDER BY 1, 2
   $$
 , $$VALUES ('val1'), ('val2'), ('val3')$$
) AS ct (bar text, val1 int, val2 int, val3 int);
登录后复制

动态Crosstab?

虽然使用plpgsql创建完全动态的crosstab具有挑战性,因为动态返回类型存在限制。以下是一个更简单的测试用例示例:

SELECT * FROM crosstab('SELECT row_name, attrib, val FROM tbl ORDER BY 1,2')
AS ct (row_name text, val1 int, val2 int, val3 int);
登录后复制

tablefunc模块:

tablefunc模块提供了一种简化的方法:

SELECT * FROM crosstab1('SELECT row_name, attrib, val::text FROM tbl ORDER BY 1,2');
登录后复制

以上是如何使用'crosstab()”在 PostgreSQL 中高效创建动态数据透视表?的详细内容。更多信息请关注PHP中文网其他相关文章!

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