#google-bigquery
#google-bigquery
Вопрос:
Я вижу, что для нескольких дат данных там нет, и теперь для дат, данные о которых не существуют, я хотел бы заменить их на ноль вместо не найдено результатов. Я попробовал, как показано ниже, и получил текущий результат
выберите trvl_details.strt_dte как cre_dte, trvl_typ_cde, объедините (count(1),0) как createdcount из project.dataset.tableid ОБЪЕДИНИТЕ UNNEST(trvl_details)trvl_details, ГДЕ trvl_details.strt_dte >= «2020-12-24» и trvl_typ_cde= ‘AIR’ group на 1,2
Может кто-нибудь, пожалуйста, помочь мне с этим?
Ответ №1:
Вы можете использовать GENERATE_DATE_ARRAY для создания списка дат, а затем соединить созданный список дат с вашими результатами:
WITH your_data AS (
select trvl_details.strt_dte as cre_dte, trvl_typ_cde, coalesce(count(1),0) as createdcount
from project.dataset.tableid JOIN UNNEST(trvl_details)trvl_details
WHERE trvl_details.strt_dte >= "2020-12-24" and trvl_typ_cde='AIR'
group by 1,2
)
SELECT day, your_data.trvl_typ_cde, IFNULL(your_data.createdcount, 0)
FROM UNNEST(GENERATE_DATE_ARRAY('2020-12-01', '2020-12-31')) as day
LEFT JOIN your_data
ON day = your_data.cre_dte
Комментарии:
1. .. Это сработало. Но хотелось бы, есть ли способ получить желаемый результат без использования сгенерированного массива, поскольку он включает ручное предоставление дат. .