在 postgres 中分组时旋转

Pivoting while grouping in postgres

我一直在 postgres 中使用交叉表来转换 table,但现在我需要添加一个分组,我不确定这是否可行。

我从这样的结果开始:

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 
      

这是我写的代码 return 错误“提供的 SQL 必须 return 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);

(我在示例 tables 中以简化格式写了日期,但它们是时间戳)

有没有其他方法可以让第一个 table 看起来像第二个?谢谢!

您可以进行条件聚合:

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#