У меня есть запрос HIVE
, который вычисляет некоторые значения с использованием GROUP BY
.
SELECT
COUNT(DISTINCT user_id),
date,
operating_system,
action
FROM user_actions
GROUP BY date, operation_system, action;
Этот запрос корректно возвращает мой первый результат, то есть число уникальных пользователей, которые выполнили каждое действие на каждомплатформа на каждый день.
Теперь я также хочу подсчитать общее количество уникальных пользователей для каждой операционной системы в каждый день и добавить это в виде столбца.Таким образом, мы можем сравнить количество пользователей, выполнивших каждое действие, с общим количеством пользователей на этой платформе / день.
Моя попытка была следующей:
SELECT
COUNT(DISTINCT user_id),
date,
operating_system,
action,
COUNT(DISTINCT user_id) OVER (PARTITION BY operation_system, date) AS TOTAL
FROM user_actions
GROUP BY date, operation_system, action;
Мне было интересно,между ними есть лучшая практика.Первый, кажется, даже не работает правильно?Я думаю, что это потому, что раздел вычисляется ПОСЛЕ GROUP BY
, а не одновременно.
Если это так, то в соответствии с этим: https://www.postgresql.org/docs/9.0/tutorial-window.html, Я могупереместить мою функцию, которая вычисляет итог, в подзапрос, а затем выбрать из этого, но это кажется "хакерским".