如何在 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 行的简单表?的主要内容,如果未能解决你的问题,请参考以下文章
如何将 2 行或更多行的数据添加到 postgresql 中的一行
如何计算 Postgresql 中特定日期最后 7 行的累积总和?
如何使用 pandas 或 python 将具有数百万行的表从 PostgreSQL 复制到 Amazon Redshift