Ежедневная сумма по типу для отображения даты и "0", даже когда ноль (нет активности для этого типа в эту дату)
Я запрашиваю Amazon Redshift (в основном postgresql, за исключением нескольких функций) и пытаюсь получить ежедневную сумму по типу за каждый день (agg daily), но хотел бы включить ноль как '0' в дни, когда для этот конкретный тип. Я могу присоединиться к другой таблице для дат, но, кажется, она работает только тогда, когда существует не более одного типа.
используя это:
select date_dy, type, sum(cost) from data
full join(table_that_includes_all_dates) date_table on date_table.date_dy=data.date_dy
дает мне этот ответ:
date_dy type sum
8/10/2013 Type 1 466
8/12/2013 Type 1 564
8/14/2013 Type 1 456
8/16/2013 Type 1 878
8/11/2013 Type 2 5461
8/12/2013 Type 2 456
8/13/2013 Type 2 887
8/14/2013 Type 2 52
8/15/2013 Type 2 5456
8/16/2013 Type 2 5488
Но чего я хочу это так:
date_dy type sum
8/10/2013 Type 1 466
8/11/2013 Type 1 0
8/12/2013 Type 1 564
8/13/2013 Type 1 0
8/14/2013 Type 1 456
8/15/2013 Type 1 0
8/16/2013 Type 1 878
8/11/2013 Type 2 5461
8/12/2013 Type 2 456
8/13/2013 Type 2 887
8/14/2013 Type 2 52
8/15/2013 Type 2 5456
8/16/2013 Type 2 5488
1 ответ
select v.date_dy, v.type, sum(coalesce(cost, 0))
from data
right join (select date_dy, type from date_table cross join type_table) v
on v.date_dy = data.date_dy
and v.type = data.type
group by v.date_dy, v.type
order by v.date_dy, v.type
Скрипка: http://sqlfiddle.com/
В Fiddle обратите внимание, что 8/12 отсутствует в таблице данных, но у него правильно есть 2 строки, одна с Типом 1, другая с Типом 2, обе с нулем.
В 8/11 таблица данных имеет строку для типа 1, но не для типа 2, но в запросе правильно отображается "нулевая строка" для типа 2 на эту дату.