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

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

Patricia Arquette
Patricia Arquette原創
2025-01-03 19:06:40757瀏覽

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

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