Вставьте нулевые значения для несуществующих групп в Redshift - PullRequest
0 голосов
/ 11 декабря 2018

Я пишу простой запрос на Amazon Redshift следующим образом:

SELECT EXTRACT(year FROM created_at) AS year,
       EXTRACT(month FROM created_at) AS month,
       member_id,
       COUNT(*) as pageviews
FROM TABLE
GROUP BY year,
         month,
         member_id
ORDER BY year,
         month,
         member_id

Это дает мне в качестве примера следующий результат:

year    month   member_id    pageviews
2015      1        100          29
2015      2        100          22
2015      3        100          178
2015      4        100          34
2015      1        200          56
2015      3        200          16

Вот результат, который я хотел быхотел бы иметь:

year    month   member_id    pageviews
2015      1        100          29
2015      2        100          22
2015      3        100          178
2015      4        100          34
2015      1        200          56
2015      2        200          0
2015      3        200          16
2015      4        200          0

В приведенном выше результате обратите внимание на дополнительные строки с нулевым просмотром страниц.

Как мне получить этот результат?Любая помощь будет высоко ценится.

1 Ответ

0 голосов
/ 11 декабря 2018

Используйте cross join для генерации строк и затем left join для ввода данных:

SELECT EXTRACT(year FROM created_at) AS year,
       EXTRACT(month FROM created_at) AS month,
       m.member_id,
       COUNT(t.member_id) as pageviews
FROM (SELECT DISTINCT EXTRACT(year FROM created_at) AS year, EXTRACT(month FROM created_at) AS month FROM TABLE) ym CROSS JOIN
     (SELECT DISTINCT member_id FROM TABLE) m LEFT JOIN
     TABLE t
     ON EXTRACT(year FROM created_at) AS month = ym.year AND
        EXTRACT(month FROM created_at) AS month = ym.month AND
        t.member_id = m.member_id
GROUP BY ym.year, ym.month, m.member_id
ORDER BY ym.year, ym.month, m.member_id;

Предполагается, что все комбинации года / месяца включены в таблицу.

Если у вас есть другие таблицы, которые являются лучшими источниками для членов и дат, попробуйте их - это может быть быстрее, чем SELECT DISTINCT.

...