使用分区函数进行非重复计数:COUNT() OVER 与 DISTINCT
本题探讨了 SQL 的 OVER 子句在计算非重复计数时的使用。用户尝试使用带有 DISTINCT 关键字的 COUNT() OVER (PARTITION BY ...) 函数来获取给定月份内唯一用户的运行总数。然而,这种方法会遇到错误。
出现该错误是因为 SQL Server 的 OVER 函数目前不支持分区子句中的 DISTINCT 关键字。因此,用户无法在分区期间应用非重复计数。
此问题的解决方案是利用 dendense_rank() 函数。以下表达式实现了所需的输出:
dense_rank() over (partition by [Mth] order by [UserAccountKey]) + dense_rank() over (partition by [Mth] order by [UserAccountKey] desc) - 1
通过应用dense_rank() 两次并减去结果,该表达式可以有效地计算每个月内指定列中不同值的数量。此方法提供了与最初使用 DISTINCT 的 COUNT() OVER (PARTITION BY ...) 相同的功能。
以上是COUNT() OVER (PARTITION BY ...) 可以在 SQL Server 中处理 DISTINCT 计数吗?的详细内容。更多信息请关注PHP中文网其他相关文章!