我正在寻找一种方法来在 Impala 的所有组中创建“总计”列。
使用窗口函数很容易获得分区组的总数,如下所示:
sum(x) over(按 A 划分)
但是似乎没有一个表达式可以按“all”进行分区。这是 Impala 的缺点吗?看起来在 postgress 中你可以将 over 语句留空。
分区子句是可选的。您可以编写这样的查询:
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
如果空分区子句不起作用,请尝试按硬编码值分区。与聚合sql不同,不需要注释掉其他列
选择 count(1) over (按 1 分区) AS count_all, q.* from q