首页 > 数据库 > mysql教程 > 如何计算 SQL Server 分区内的不同值?

如何计算 SQL Server 分区内的不同值?

Barbara Streisand
发布: 2025-01-04 14:13:40
原创
894 人浏览过

How Can I Count Distinct Values Within Partitions in SQL Server?

使用 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
登录后复制

此表达式计算每个月内不同值的运行总计。它的工作原理如下:

  • 第一项,dense_rank()(按[Mth]顺序按[UserAccountKey]分区),为每个月内[UserAccountKey]中的每个值分配一个排名,从从1.
  • 第二项,dense_rank() over (partition by [Mth] order by [UserAccountKey] desc),以相反的顺序对值进行排名,也是从 1 开始。
  • 从第一项中减去第二项会产生重复值的结果 0 以及唯一值第一次出现的排名。

以上是如何计算 SQL Server 分区内的不同值?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板