2017-01-06 1 views
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 

を私は次のようにこれを変換したい:

 
     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 ...)の出現回数。

注:データセットは非常に大きいため、アプリケーション側の変換は非常にコストがかかります。

答えて

2

あなたは、各列の上に2つの集計クエリを、持っている可能性があり、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