多列的唯一计数

时间:2017-01-06 07:32:32

标签: sql postgresql aggregation greenplum plpython

我在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 ......)。

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

1 个答案:

答案 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