Я хотел бы посчитать количество ежедневных уникальных активных пользователей по subreddit и дню, а затем агрегировать эти подсчеты на ежемесячных уникальных активных пользователей по группам и месяцам. Выполнение каждого из них по отдельности достаточно просто, но когда я пытаюсь выполнить их в одном комбинированном запросе, это говорит мне, что мне нужно сгруппировать по date_month_day в моем подзапросе второго уровня, что приведет к тому, что month_unique_users будет таким же, как daily_unique_uauthors .. ( Ошибка: выражение «date_month_day» отсутствует в списке GROUP BY [invalidQuery]).
Вот мой запрос:
SELECT * FROM
(
SELECT *,
(daily_unique_authors/monthly_unique_authors) * 1.0 AS ratio,
ROW_NUMBER() OVER (PARTITION BY date_month_day ORDER BY ratio DESC) rank
FROM
(
SELECT subreddit,
date_month_day,
daily_unique_authors,
SUM(daily_unique_authors) AS monthly_unique_authors,
LEFT(date_month_day, 7) as date_month
FROM
(
SELECT subreddit,
LEFT(DATE(SEC_TO_TIMESTAMP(created_utc)), 10) as date_month_day,
COUNT(UNIQUE(author)) as daily_unique_authors
FROM TABLE_QUERY([fh-bigquery:reddit_comments], "table_id CONTAINS \'20\' AND LENGTH(table_id)<8")
GROUP EACH BY subreddit, date_month_day
)
GROUP EACH BY subreddit, date_month))
WHERE rank <= 100
ORDER BY date_month ASC
Конечный результат в идеале должен выглядеть примерно так:
subreddit date_month date_month_day daily_unique_users monthly_unique_users ratio
1 google 2005-12 2005-12-29 77 600 0.128
2 google 2005-12 2005-12-31 52 600 0.866
3 google 2005-12 2005-12-28 81 600 0.135
4 google 2005-12 2005-12-27 73 600 0.121