如何通过窗口函数过滤聚合函数的 SQL 语句中的行?
Posted
技术标签:
【中文标题】如何通过窗口函数过滤聚合函数的 SQL 语句中的行?【英文标题】:How to filter rows in SQL statement for aggregate function by window function? 【发布时间】:2017-02-15 12:32:09 【问题描述】:我有一些表格并向用户提供工具以根据现有内容生成新列。
表:
+---+
| 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】:只需使用带有case
的窗口函数:
select a, max(case when a < 3 then a end) over () as b
from t;
【讨论】:
以上是关于如何通过窗口函数过滤聚合函数的 SQL 语句中的行?的主要内容,如果未能解决你的问题,请参考以下文章