#sql #postgresql
#sql #postgresql
Вопрос:
Я пытаюсь написать запрос, чтобы получить общий объем продаж за день, результаты должны содержать все даты с 2020-05-01 до текущей даты, независимо от того, была ли в тот день распродажа или нет. Приведенный ниже запрос выдаст результаты для продаж на соответствующую дату, присутствующую в моей таблице.
select date as DATE, SUM (order_amount_in_eur)
from orders
where date >= '2020-05-01' group by 1;
Я хочу, чтобы дополнительные строки даты, начиная с 2020-05-01 до сегодняшнего дня, которые не существуют в таблице, и имели нулевое значение в столбце продаж соответствующей даты, когда продаж было ноль / нет.
Я хочу получить ответ, как показано ниже на прилагаемом скриншоте, для всех недостающих дат, начиная с 2020-05-01 по сегодняшний день.
Спасибо
Это моя исходная таблица.
Комментарии:
1. Я удалил несовместимые теги базы данных. Пожалуйста, помечайте только ту базу данных, которую вы действительно используете.
Ответ №1:
Вы бы использовали left join
и generate_series()
:
select gs.dte, coalesce(sum(order_amount_in_eur), 0)
from generate_series('2020-05-01'::date, current_date, interval '1 day') gs(dte) left join
orders o
on o.date = gs.dte
group by gs.dte;