首頁 > 資料庫 > mysql教程 > 如何在不使用 DISTINCT 的情況下計算 SQL Server 分割區內的不同計數?

如何在不使用 DISTINCT 的情況下計算 SQL Server 分割區內的不同計數?

Patricia Arquette
發布: 2025-01-03 19:06:40
原創
749 人瀏覽過

How to Calculate Distinct Counts Within Partitions in SQL Server Without Using DISTINCT?

使用分區函數計算不同計數

在 SQL Server 中,COUNT() OVER 函數可讓您聚合指定分割區內的資料。但是,不支援在分區函數中使用 DISTINCT 關鍵字。這讓開發人員想知道如何取得分區內的非重複計數。

使用 DENSE_RANK

計算非重複計數的一個簡單解決方案是利用 DENSE_RANK 函數。以下查詢示範如何操作:

DENSE_RANK() OVER (PARTITION BY [Mth] ORDER BY [UserAccountKey])
+ DENSE_RANK() OVER (PARTITION BY [Mth] ORDER BY [UserAccountKey] DESC)
- 1
登入後複製

此表達式計算每個月內不同 UserAccountKey 的數量。它透過首先在每個月內按升序和降序對 UserAccountKeys 進行排名來實現此目的。然後將這些排名相加,並減去 1 以獲得所需的計數。

範例

考慮以下資料:

| Mth | UserAccountKey |
|---|---|
| 1 | A |
| 1 | B |
| 1 | C |
| 2 | D |
| 2 | E |
| 2 | F |
登入後複製

使用上面的表達式,查詢將傳回以下內容結果:

| Mth | NumUsers |
|---|---|
| 1 | 3 |
| 2 | 3 |
登入後複製

結論

DENSE_RANK函數提供了一種簡潔有效的方法來計算 SQL Server 中分區內的不同計數,即使 DISTINCT 關鍵字不是PARTITION BY 子句直接支援。

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

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