如何通过窗口函数过滤SQL语句中的聚合函数行?

时间:2017-02-15 12:32:09

标签: sql apache-spark-sql aggregate-functions window-functions

我有一些表,并为用户提供工具,以根据存在生成新列。

表:

+---+
|  a|
+---+
|  0|
|  1|
|  2|
|  3|
|  4|
|  5|
+---+

新列名:b

新列规则必须类似于:max(a) over(WHERE a < 3)

如何正确写这个?

结果必须类似于SQL语句:SELECT *, (SELECT max(a) FROM table WHERE a < 3) as b FROM table。并返回:

+---+---+
|  a|  b|
+---+---+
|  0|  2|
|  1|  2|
|  2|  2|
|  3|  2|
|  4|  2|
|  5|  2|
+---+---+

但我不能在over()WHERE语句中写入内容并且不能让用户知道表的名称。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

只需使用case的窗口函数:

select a, max(case when a < 3 then a end) over () as b
from t;