如何在 postgresql 中旋转 2 行的简单表?

Posted

技术标签:

【中文标题】如何在 postgresql 中旋转 2 行的简单表?【英文标题】:how to pivot simple table of 2 rows in postgresql? 【发布时间】:2021-08-19 09:47:55 【问题描述】:

预期的表格是这样的:

good_days   bad_days
6           25

但我有这张桌子:

day_type    x
bad_days    25
good_days   6

我的代码不工作:

select * 
from (select * from main_table)t
  pivot(count(x) for day_type in ('bad_days', 'good_days')  )  as pivot_table

【问题讨论】:

【参考方案1】:

有多种方法可以做到这一点

    使用postgresql扩展tablefunc,其中包含crosstab方法,可以接受查询结果并旋转结果

    您还可以创建自定义查询(仅当您对day_type 列值知之甚少时才有效)

WITH cte (day_type, x) AS (
        VALUES ('bad_days', 25), ('good_days', 6))
SELECT sum(good_days) AS good_days,
       sum(bad_days) AS bad_days
FROM (
          (SELECT x AS good_days,
                  0 AS bad_days
           FROM cte
           WHERE day_type = 'good_days')
      UNION ALL
          (SELECT 0 AS good_days,
                  x AS bad_days
           FROM cte
           WHERE day_type = 'bad_days')) AS foo

【讨论】:

【参考方案2】:

一个简单的方法是条件聚合:

select sum(x) filter (where data_type = 'bad_days') as bad_days,
       sum(x) filter (where data_type = 'good_days') as good_days
from t;
   

【讨论】:

以上是关于如何在 postgresql 中旋转 2 行的简单表?的主要内容,如果未能解决你的问题,请参考以下文章

如何旋转表 - Postgresql

旋转数据并将单个列放入具有相关行的多列中

如何将 2 行或更多行的数据添加到 postgresql 中的一行

如何计算 Postgresql 中特定日期最后 7 行的累积总和?

如何使用 pandas 或 python 将具有数百万行的表从 PostgreSQL 复制到 Amazon Redshift

在 PostgreSQL 中使用 row_number() 旋转