使用分区函数计算不同计数
在 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中文网其他相关文章!