使用分區函數進行非重複計數:COUNT() OVER 與DISTINCT
本題探討了SQL 的OVER 子句在計算非重複計數時的使用。使用者嘗試使用帶有 DISTINCT 關鍵字的 COUNT() OVER (PARTITION BY ...) 函數來取得給定月份內唯一使用者的運行總數。然而,這種方法會遇到錯誤。
出現該錯誤是因為 SQL Server 的 OVER 函數目前不支援分區子句中的 DISTINCT 關鍵字。因此,使用者無法在分區期間套用非重複計數。
此問題的解決方案是利用 dendense_rank() 函數。以下表達式實現了所需的輸出:
dense_rank() over (partition by [Mth] order by [UserAccountKey]) + dense_rank() over (partition by [Mth] order by [UserAccountKey] desc) - 1
透過應用dense_rank() 兩次並減去結果,該表達式可以有效地計算每個月內指定列中不同值的數量。此方法提供了與最初使用 DISTINCT 的 COUNT() OVER (PARTITION BY ...) 相同的功能。
以上是COUNT() OVER (PARTITION BY ...) 可以在 SQL Server 中處理 DISTINCT 計數嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!