2017-01-06 2 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

Вы можете иметь два агрегатных запросов, на каждой колонке, и используйте полное внешнее объединение, чтобы объединить два:

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 
Смежные вопросы