首頁 >資料庫 >mysql教程 >COUNT() OVER (PARTITION BY ...) 可以在 SQL Server 中處理 DISTINCT 計數嗎?

COUNT() OVER (PARTITION BY ...) 可以在 SQL Server 中處理 DISTINCT 計數嗎?

DDD
DDD原創
2025-01-03 20:04:42808瀏覽

Can COUNT() OVER (PARTITION BY ...) Handle DISTINCT Counts in SQL Server?

使用分區函數進行非重複計數: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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn