当前位置: 首页 > article >正文

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


http://www.kler.cn/a/137345.html

相关文章:

  • Hexo Next主题集成百度统计
  • 开放词汇目标检测(Open-Vocabulary Object Detection, OVOD)综述
  • 会话守护进程
  • 【异常】GL-SFT1200路由器中继模式,TL-CPE1300D无法搜寻5G网问题分析
  • 【前端】NodeJS:MongoDB
  • Spring MVC 中,处理异常的 6种方式
  • 请收藏!2023年全栈开发人员实战进阶指南终极版
  • 去除IDEA中代码的波浪线(黄色警示线)
  • 构建和应用卡尔曼滤波器 (KF)--扩展卡尔曼滤波器 (EKF)
  • 华为云cce中环境变量的使用
  • npm ERR! Cannot read properties of null (reading ‘pickAlgorithm‘)
  • jenkins-2.426.1-1.1.noarch.rpm 的公钥没有安装
  • CentOS8部署Skywalking(非容器方式)
  • 福州大学《嵌入式系统综合设计》实验三:多媒体开发基础编程
  • Java爬虫框架下代理使用中的TCP连接池问题及解决方案
  • 「MobileNet V3」70 个犬种的图片分类
  • 01-了解微服务架构的演变过程和微服务技术栈
  • 图论 2023.11.20
  • C++中的内存管理
  • 网络连接Android设备
  • 记录一个简单的博客系统该开发过程
  • 2311rust,1.31版本更新
  • MQTT通信协议使用说明
  • 智慧箱变动环辅控系统
  • Thales安全解决方案:国家网络安全的关键
  • python 迭代器