了解 SQL Server 对 WHERE 子句中窗口函数的限制
窗口函数对于数据分析来说非常宝贵,它为跨结果集的计算提供了强大的功能。 但是,SQL Server 明确禁止在 WHERE 子句中使用它们。这个限制不是任意的;这是数据库查询处理顺序的直接结果。
SQL Server 在WHERE、JOIN、GROUP BY 和 HAVING 子句完成其处理(执行计划中的步骤 5.1)之后评估窗口函数。 如果 WHERE 子句中允许使用窗口函数,则此排序会带来歧义。
想象一个包含值 ['A', 'B', 'C', 'D', 'E', 'F'] 的表。 像这样的查询:
<code class="language-sql">SELECT col1 FROM T1 WHERE ROW_NUMBER() OVER (ORDER BY col1) > 1</code>
应该在过滤之前还是之后计算? 该顺序显着影响结果。 这种固有的歧义是限制的原因。ROW_NUMBER()
以上是为什么不能在 SQL Server WHERE 子句中使用窗口函数?的详细内容。更多信息请关注PHP中文网其他相关文章!