【发布时间】:2019-02-13 22:00:57
【问题描述】:
我有一个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,我也许可以将计算总计的函数移动到子查询中,然后从中进行选择,但这似乎“hacky”。
【问题讨论】:
标签: hive hiveql window-functions