使用窗口函数在 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 中的总计列的主要内容,如果未能解决你的问题,请参考以下文章
SQL Server 2012 Windowing 函数计算运行总计