1

我在 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

我想将其转换为以下内容:

      时间戳 | 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 ...)。

注意:数据集非常大,因此应用程序端的转换成本非常高。

4

1 回答 1

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
于 2017-01-06T07:38:48.900 回答