首頁 >資料庫 >mysql教程 >如何計算 SQL Server 分割區內的不同值?

如何計算 SQL Server 分割區內的不同值?

Barbara Streisand
Barbara Streisand原創
2025-01-04 14:13:40865瀏覽

How Can I Count Distinct Values Within Partitions in SQL Server?

使用COUNT() OVER 計算分區上的不同值

克服使用COUNT() OVER 分區函數時計算不同值的挑戰是SQL Server 中的常見問題。本文探討了另一種方法,結合使用ensemble_rank()和算術運算來實現所需的結果。

原始查詢和錯誤

原始查詢嘗試計算使用COUNT(DISTINCT) OVER 計算不同值的運行總計:

NumUsers = COUNT(DISTINCT [UserAccountKey]) OVER (PARTITION BY [Mth])

但是, SQL Server 會產生錯誤由於DISTINCT 與分割區函數不相容。

使用Dense_rank() 的替代解決方案

此問題的實際解決方案是結合使用denense_rank() 函數使用簡單的算術運算:

dense_rank() over (partition by [Mth] order by [UserAccountKey]) 
+ dense_rank() over (partition by [Mth] order by [UserAccountKey] desc) 
- 1

此表達式計算每個月內不同值的運算總計。它的工作原理如下:

  • 第一項,dense_rank()(按[Mth]順序按[UserAccountKey]分區),為每個月內[UserAccountKey]中的每個值分配一個排名,從從1.
  • 第二項,dense_rank() over (partition by [Mth] order by [UserAccountKey] desc),以相反的順序對數值進行排名,也是從 1 開始。
  • 從第一項中減去第二項會產生重複值的結果 0 以及唯一值第一次出現的排名。

以上是如何計算 SQL Server 分割區內的不同值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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