У меня проблема, когда я пытаюсь достичь желаемого результата.Задача выглядит просто - сделать ежедневный подсчет вхождений события для ведущих стран.
Основная таблица выглядит следующим образом:
id | date | country | col1 | col2 | ...
1 | 2018-01-01 21:21:21 | US | value 1 | value 2 | ...
2 | 2018-01-01 22:32:54 | UK | value 1 | value 2 | ...
Из этой таблицы я хочу получить ежедневное событиеподсчет по стране, который достигается с помощью
SELECT date::DATE AT TIME ZONE 'UTC', country, COALESCE(count(id),0) FROM tab1
GROUP BY 1, 2
Проблема возникает, когда 2 января 2018 года пользователь из Великобритании не произвел никакого события
country_events
date | country | count
2018-01-01 | US | 23
2018-01-01 | UK | 5
2018-01-02 | US | 30
2018-01-02 | UK | 0 -> is desired result, but row is missing
Я пыталсясоздайте серию дат и ряд стран, которые я ищу, затем CROSS JOIN
эти две таблицы.Это helper
со столбцами date
и country
, которые я оставил объединенными с моей таблицей результатов, например
SELECT * FROM helper h
LEFT JOIN country_events c ON c.date::DATE = h.date::DATE AND c.country = h.country
Я использую PostgreSQL.