Я пытаюсь подсчитать сгенерированные лиды и заметил, что у меня есть представитель, которому не хватает данных за две недели. Я предполагаю, что это потому, что этот человек был в отпуске и имел нулевые значения в эти даты, а левое соединение не будет отображать даты с нулевыми значениями.
Мне было интересно, как сделать так, чтобы даты, когда люди имеют нуль, отображались как 0 в столбце подсчета.
Это мой текущий код:
select
t.date, t.michelle_finwell_target, f.name, f.cat, f.c_date_applied::date,
Count(f.*) "count"
from servicing_targets t
left join finwell_leads f on t.date::date = f.c_date_applied::date
Where
name = 'Michelle'
group by
t.date, t.michelle_finwell_target, f.name, f.cat, f.c_date_applied::date
order by
f.c_date_applied::date asc
И это мои результаты:
Столбцы date и c_date_applied перескакивают с 20.10.2020 на 03.11.2020.
Как изменить запрос, чтобы он отображал число 0 для рабочих дней между 20.10 и 3.11?
Спасибо!
Используйте generate_series(timestamp,timestamp,interval)
для создания столбца дат. Присоединяйтесь к ним с этим пользователем. Затем присоединитесь к нему со своими данными.
where name = 'Michelle'
превращает left join
в inner join
. Сравнивать:
with t1(x) as (values(1),(2)), t2(x,y) as (values(1,11))
select *
from t1 left join t2 on (t1.x = t2.x);
┌───┬──────┬──────┐
│ x │ x │ y │
├───┼──────┼──────┤
│ 1 │ 1 │ 11 │
│ 2 │ ░░░░ │ ░░░░ │
└───┴──────┴──────┘
with t1(x) as (values(1),(2)), t2(x,y) as (values(1,11))
select *
from t1 left join t2 on (t1.x = t2.x)
where t2.y=11;
┌───┬───┬────┐
│ x │ x │ y │
├───┼───┼────┤
│ 1 │ 1 │ 11 │
└───┴───┴────┘
Если вы хотите сохранить пустые строки из правой таблицы в left join
, переместите связанные условия в выражение join
:
with t1(x) as (values(1),(2)), t2(x,y) as (values(1,11))
select *
from t1 left join t2 on (t1.x = t2.x and t2.y=11);
┌───┬──────┬──────┐
│ x │ x │ y │
├───┼──────┼──────┤
│ 1 │ 1 │ 11 │
│ 2 │ ░░░░ │ ░░░░ │
└───┴──────┴──────┘
С вашим запросом это должно быть:
select
t.date, t.michelle_finwell_target, f.name, f.cat, f.c_date_applied::date,
Count(f.*) "count"
from servicing_targets t
left join finwell_leads f on t.date::date = f.c_date_applied::date and name = 'Michelle'
group by
t.date, t.michelle_finwell_target, f.name, f.cat, f.c_date_applied::date
order by
f.c_date_applied::date asc
классно, спасибо за видос! это очень помогло!
Пожалуйста, предоставьте образцы данных и желаемые результаты. У вас много столбцов в предложении
group by
, но только одна строка в день в наборе результатов, что немного сбивает с толку.