使用 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
此表达式计算每个月内不同值的运行总计。它的工作原理如下:
以上是如何计算 SQL Server 分区内的不同值?的详细内容。更多信息请关注PHP中文网其他相关文章!