Ошибка в последнем утверждении.По какой-то причине вы группируете по каждому столбцу и выполняете сложение здесь: ase + asi
.Вместо этого я попытался бы заменить следующие строки:
,ase + asi AS count
...
GROUP BY ase, asi, DATE_TRUNC('week',eas.date)::DATE - '1 day'::INTERVAL
на
,sum(ase)+sum(asi) AS count
...
GROUP BY DATE_TRUNC('week',eas.date)::DATE - '1 day'::INTERVAL
, что фактически суммирует оба значения ase
и asi
для каждой даты с использованием функции агрегированиятак, чтобы последняя часть вашего запроса выглядела следующим образом:
SELECT
DATE_TRUNC('week',eas.date)::DATE - '1 day'::INTERVAL AS l_create
,sum(ase)+sum(asi) AS count
FROM eas FULL JOIN ias
ON ias.date = eas.date
GROUP BY DATE_TRUNC('week',eas.date)::DATE - '1 day'::INTERVAL
ORDER BY DATE_TRUNC('week',eas.date)::DATE - '1 day'::INTERVAL ASC
Для дальнейшего изучения причин, по которым это происходит, вам нужно отказаться от предложения GROUP BY
и просмотреть данные, чтобы убедиться в том, чтоFULL JOIN
делает.
Образец
Ниже я прилагаю образец истории, которая воспроизводит вашу проблему, но вместо столбца даты я использовал целое число (нетразница для вашего случая).
postgres=# create table a(dt int, cnt int);
CREATE TABLE
postgres=# create table b(dt int, cnt int);
CREATE TABLE
postgres=# insert into a values (1,21),(2,46),(3,25),(4,25);
INSERT 0 4
postgres=# insert into b values (1,67),(2,129),(3,148),(4,138);
INSERT 0 4
postgres=# select a.dt,sum(a.cnt)+sum(b.cnt) from a full join b on a.dt=b.dt group by a.dt order by a.dt;
dt | ?column?
----+----------
1 | 88
2 | 175
3 | 173
4 | 163