【问题标题】: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】:
有多种方法可以做到这一点
-
使用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;