- 类别:
QUALIFY¶
在 SELECT 语句中, QUALIFY 子句筛选窗口函数的结果。
QUALIFY 对窗口函数的作用就像 HAVING 对聚合函数和 GROUP BY 子句的作用一样。
因此,在查询的执行顺序中, QUALIFY 在计算窗口函数之后进行计算。通常,SELECT 语句的子句按如下所示的顺序进行计算:
FROM
WHERE
GROUP BY
HAVING
WINDOW
QUALIFY
DISTINCT
ORDER BY
LIMIT
语法¶
包含 QUALIFY 的语句的一般形式类似于以下内容(允许有一些顺序变化,但未显示):
参数¶
使用说明¶
QUALIFY 子句要求在 SELECT 语句的以下至少一个子句中指定至少一个窗口函数:
SELECT 列的列表。
QUALIFY 子句的筛选谓词。
下面的“示例”一节中显示了其中每个子句的示例。
SELECT 列表中的表达式(包括窗口函数)可以通过 SELECT 列表中定义的列别名来引用。
QUALIFY 支持谓词中的聚合和子查询。对于聚合,适用与 HAVING 子句相同的规则。
QUALIFY 一词是一个保留的词。
QUALIFY 的 Snowflake 语法不是 ANSI 标准的一部分。
示例¶
QUALIFY 子句简化了需要对窗口函数结果进行筛选的查询。如果没有 QUALIFY,筛选需要嵌套。下面的示例使用 ROW_NUMBER() 函数仅返回每个分区中的第一行。
创建并加载表:
此查询使用的是嵌套,而不是 QUALIFY:
此查询使用 QUALIFY:
您还可以使用 QUALIFY 来引用 SELECT 列的列表中的窗口函数:
您可以通过从上一个查询中移除相关内容并比较输出来了解 QUALIFY 如何充当筛选器:
QUALIFY 子句还可以与聚合函数组合,并且可以在谓词中包含子查询。在此类查询中,HAVING 在 GROUP BY 聚合之后对行进行筛选,而 QUALIFY 则在窗口函数计算完成后对行进行筛选。当查询同时需要两种筛选时,这两个子句可以一起使用。例如: