postgresql 行转列的例子

postgresql 行转列的例子

首先要启用tablefunc 扩展。
用管理员账户执行下面的指令。

CREATE EXTENSION tablefunc;

在 PostgreSQL 中,你可以使用 crosstab 函数将列转换为行。crosstab 函数是在 tablefunc 扩展中提供的,因此在使用之前,你需要确保已经安装并启用了该扩展。

下面是一个示例,假设你有一个名为 sales 的表,其中包含了销售数据:

CREATE TABLE sales (
  product_id INT,
  month INT,
  amount NUMERIC
);

INSERT INTO sales (product_id, month, amount)
VALUES
  (1, 1, 100),
  (1, 2, 150),
  (1, 3, 200),
  (2, 1, 50),
  (2, 2, 75),
  (2, 3, 100);

现在,你想要将这些数据按照产品 ID 进行列转行,使得每个产品的销售额在不同的月份中成为一行。你可以使用以下查询来实现:

SELECT *
FROM crosstab(
  'SELECT product_id, month, amount
   FROM sales
   ORDER BY 1, 2',
  'VALUES (1), (2), (3)'
) AS sales_pivot (product_id INT, month_1 NUMERIC, month_2 NUMERIC, month_3 NUMERIC);

这个查询中,我们首先指定了原始查询,它返回了 product_id、month 和 amount 列。然后,我们指定了一个包含所有可能 product_id 值的值列表,这里是 (1), (2), (3)。最后,我们使用 crosstab 函数将原始查询的结果进行转换,并指定了转换后的列名。

运行上述查询,你将会得到以下结果:

 product_id | month_1 | month_2 | month_3
------------+---------+---------+---------
          1 |     100 |     150 |     200
          2 |      50 |      75 |     100

这样,你就将原始的列转换为了行,每个产品的销售额在不同的月份中成为了一行。

更多案例请参考:
https://blog.csdn.net/qq_31156277/article/details/90598311

你可能感兴趣的:(postgresql,postgresql,数据库)