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

How to filter rows in SQL statement for aggregate function by window function?

我有一些 table 并向用户提供工具以根据现有列生成新列。

Table:

+---+
|  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。并且 returns:

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

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

只需使用 window 函数与 case:

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