我在postgres / greenplum上,我有一个像这样的查询结果:
e1 | e2 ------------------- | ------------------- 2017-01-01 00:00:00 | 2017-01-02 00:00:00 2017-01-01 00:00:00 | 2017-01-03 00:00:00 | 2017-01-03 00:00:00
我想将其转换为以下内容:
timestamp | e1 | e2 ---------------------+----+---- 2017-01-01 00:00:00 | 2 | 0 2017-01-02 00:00:00 | 0 | 1 2017-01-03 00:00:00 | 1 | 1
此处第一列包含所有唯一时间戳和其余列各自事件的发生次数(e1,e2 ......)。
注意:数据集非常大,因此应用程序方面的转换成本非常高。
答案 0 :(得分:2)
对于每列,您可以有两个聚合查询,并使用完整的外部联接来组合这两个:
SELECT COALESCE(e1_timestamp, e2_timestamp),
COALESCE(e1_count, 0),
COALESCE(e2_count, 0)
FROM (SELECT e1 AS e1_timestamp, COUNT(*) AS e1_count
FROM mytable
GROUP BY e1) e1
FULL OUTER JOIN (SELECT e2 AS e2_timestamp, COUNT(*) AS e2_count
FROM mytable
GROUP BY e2) e2 ON e1_timestamp = e2.timestamp