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

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

Barbara Streisand
發布: 2025-01-04 14:13:40
原創
857 人瀏覽過

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板