如何通过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;
我有一些 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;