了解 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中文網其他相關文章!