Как посчитать данные временной метки из нескольких таблиц и сгруппировать по дате? - PullRequest
0 голосов
/ 28 апреля 2020

У меня есть 9 таблиц, каждая из которых содержит строки с отметкой времени created_at. Пример для table_1:

created_at           | item_id | ..
2020-01-01 14:00:20  | 5       |
2020-01-01 14:32:01  | 11      |
...
2020-01-03 09:00:07  | 7

Я хотел бы создать сводное представление, которое подсчитывает строки в каждой из 9 таблиц на дату . Для одной таблицы я мог бы просто сделать

select
  t1.created_at::date ,
  count(*)
from
  table_1 t1
group by
  t1.created_at::date;

Но у меня есть 9 таблиц, и представление должно выглядеть как

date       | count_table_1 | count_table_2 | ..
2020-01-01 | 141           | 200           | ..
2020-01-02 | 0             | 179           |

1 Ответ

2 голосов
/ 28 апреля 2020

Вы можете выбрать одну из очередей и присоединиться к ним:

select dt, t1.cnt as t1_cnt, t2.cnt as t2_cnt, t3.cnt as t3_cnt, ...
from
 (select created_at::date as dt, count(*) as cnt from table1 group by created_at::date) t1
full outer join
 (select created_at::date as dt, count(*) as cnt from table2 group by created_at::date) t2
 using (dt)
full outer join
 (select created_at::date as dt, count(*) as cnt from table3 group by created_at::date) t3
 using (dt)
...
order by dt;

Это даст вам нулевые значения, если записи нет. Если вы хотите использовать нули, используйте COALESCE: select dt, coalesce(t1.cnt, 0) as t1_cnt, ....

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...