如何使用多(我需要2)列作为postgresql交叉表的分组列?

如何使用多(我需要2)列作为postgresql交叉表的分组列?,sql,postgresql,pivot,crosstab,Sql,Postgresql,Pivot,Crosstab,我想在postgress中构造一个交叉表,它有两列用于分组,inst和date,事件用于类别 From: inst date event times inst1 jan01 high_cpu 5 inst1 jan01 high_io 3 inst1 jan01 net_slow 4 inst1 jan02 high_cpu 6 inst1 jan02 high_io 2 inst1 jan02

我想在postgress中构造一个交叉表,它有两列用于分组,inst和date,事件用于类别

From: inst date event times inst1 jan01 high_cpu 5 inst1 jan01 high_io 3 inst1 jan01 net_slow 4 inst1 jan02 high_cpu 6 inst1 jan02 high_io 2 inst1 jan02 net_slow 3 inst2 jan01 high_cpu 2 inst2 jan01 high_io 2 inst2 jan01 net_slow 5 inst2 jan02 high_cpu 3 inst2 jan02 high_io 6 inst2 jan02 net_slow 1 Want output like this: inst date high_cpu high_io net_slow inst1 jan01 5 3 4 inst1 jan02 6 2 3 inst2 jan01 2 2 5 inst2 jan02 3 6 1 发件人: 安装日期事件时间 inst1 jan01高cpu 5 仪表1 01年1月3日高 仪表1 01年1月净转速4 inst1 jan02高_cpu 6 仪表1 02年1月2日高位 仪表1 02年1月净转速3 inst2 jan01高_cpu 2 仪表2 01年1月2日高 仪表2 01年1月净速5 inst2 jan02高cpu 3 仪表2 02年1月6日高位 仪表2 02年1月净转速1 想要这样的输出: 安装日期高\u cpu高\u io净\u慢 2001年1月1日5 3 4 2002年1月1日6 2 3 inst2 jan01 2 5 2002年1月2日3 6 1 如何构造postgres sql代码,以便同时具有inst和date列进行分组?
我查看了文档,它似乎主要讨论单个分组列,谢谢。

最简单的方法是使用过滤聚合:

select inst, "date",
       sum(times) filter (where event = 'high_cpu') as high_cpu,
       sum(times) filter (where event = 'high_io') as high_io,
       sum(times) filter (where event = 'net_slow') as net_slow
from the_table
group by inst, "date"
order by inst, "date"

谢谢一个没有名字的马,虽然你的查询没有所谓的“交叉表”关键字,但是它工作得很好,逻辑也很清楚,我喜欢它,谢谢兄弟!!