如何解决在postgres中分组时旋转
我一直在postgres中使用交叉表来旋转表,但是现在需要添加分组,而且我不确定是否可以。
我从这样的结果开始:
Date Account# Type Count
-----------------------------------------
2020/1/1 100 Red 5
2020/1/1 100 Blue 3
2020/1/1 100 Yellow 7
2020/1/2 100 Red 2
2020/1/2 100 Yellow 9
2020/1/1 101 Red 4
2020/1/1 101 Blue 7
2020/1/1 101 Yellow 3
2020/1/2 101 Red 8
2020/1/2 101 Blue 6
2020/1/2 101 Yellow 4
我想像这样对它进行透视,其中日期和帐户#的每种组合都有一行:
Date Account# Red Blue Yellow
---------------------------------------------
2020/1/1 100 5 3 7
2020/1/2 100 2 0 9
2020/1/1 101 4 7 3
2020/1/2 101 8 6 4
这是我编写的代码,返回错误“提供的SQL必须返回3列:rowid,类别和值”,这对我对交叉表的理解是有意义的。
SELECT *
FROM crosstab(
SELECT date,account_number,type,count
FROM table
ORDER BY 2,1,3'
) AS ct (date timestamp,account_number varchar,Red bigint,Blue bigint,Yellow bigint);
(我在示例表中以简化格式写了日期,但它们是时间戳)
有没有其他方法可以使第一个表看起来像第二个表?谢谢!
解决方法
您可以进行条件聚合:
select
date,account#,sum(cnt) filter(where type = 'Red' ) red,sum(cnt) filter(where type = 'Blue' ) blue,sum(cnt) filter(where type = 'Yellow') yellow
from mytable
group by date,account#
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。