使用窗口函数在 Impala 中的总计列

Posted

技术标签:

【中文标题】使用窗口函数在 Impala 中的总计列【英文标题】:grand total column in Impala using window function 【发布时间】:2016-08-26 20:32:47 【问题描述】:

我正在寻找一种在 Impala 中跨所有组创建“总计”列的方法。

很容易使用窗口函数来获得分区组的总数,如下所示:

sum(x) over (Apartition by A)

但是,似乎没有表达式可以按“全部”进行分区。这是 Impala 的缺点吗?看起来在 postgress 中您可以将 over 语句留空。

【问题讨论】:

【参考方案1】:

partition 子句是可选的。你可以这样写一个查询:

select sum(x) over () from t;

例如:

[localhost:21000] > select id, sum(id) over () from tbl;
+----+-------------------+
| id | sum(id) OVER(...) |
+----+-------------------+
| 0  | 28                |
| 1  | 28                |
| 2  | 28                |
| 3  | 28                |
| 6  | 28                |
| 7  | 28                |
| 4  | 28                |
| 5  | 28                |
+----+-------------------+
Fetched 8 row(s) in 0.08s

【讨论】:

由于某种原因我不能这样做。我得到:errorMessage:AnalysisException:选择列表表达式不是由聚合输出产生的(缺少GROUP BY子句?):sum(X)OVER()问题不在整体查询GROUP BY子句中(很简单,按一个分组柱子)。如果我按语句包含分区,我可以使用分析函数。 您的查询还有其他问题。你能发布更多的查询吗? SELECT a.app ,sum(a.rev) as 'rev_by group' ,sum(a.rev) over () as 'total' from rev_table a group by a.app 结果:选择聚合输出未生成的列表表达式(缺少 GROUP BY 子句?): sum(a.rev) OVER () 我不明白 GROUP BY 子句中已包含唯一的其他非聚合列...不确定如何解释这一点。谢谢你的帮助 你混合聚合和窗口函数。请在此处找到解决方案:***.com/questions/50201554/…

以上是关于使用窗口函数在 Impala 中的总计列的主要内容,如果未能解决你的问题,请参考以下文章

不得不学的常用Impala窗口函数

SQL Server 2012 Windowing 函数计算运行总计

针对同一列中的另一个计算窗口函数

窗口函数 ROW_NUMBER() 使用变量 RUNNING TOTAL 更改处理 ORDER BY

如何创建与列相关的大小的 Pyspark 窗口函数

窗口函数