使用分區函數計算不同計數
在 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中文網其他相關文章!