Ежедневная сумма по типу для отображения даты и "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 на эту дату.

Другие вопросы по тегам