【问题标题】:how to pivot simple table of 2 rows in postgresql?如何在 postgresql 中旋转 2 行的简单表?
【发布时间】: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

【问题讨论】:

    标签: sql postgresql pivot pivot-table


    【解决方案1】:

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

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

    2. 您还可以创建自定义查询(仅当您对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;
         
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多