带分区的 SQL Row_Count 函数

Posted

技术标签:

【中文标题】带分区的 SQL Row_Count 函数【英文标题】:SQL Row_Count function with Partition 【发布时间】:2016-01-11 15:07:36 【问题描述】:

我有一个查询,它从几个 UNION ALL 连接的查询中返回一组结果作为名为 DATA 的表。

然后我对此进行ROW_NUMBER(),以获取特定分组的行号 (WorksOrderNo)

ROW_NUMBER() Over(partition by Data.WorksOrderNo order by Data.WorksOrderNo) as RowNo,

是否有一个等效的ROW_Count 函数,我可以在其中指定一个分区,并返回该分区的行数?

ROW_Count() Over(partition by Data.WorksOrderNo order by Data.WorksOrderNo) as RowNo ???

原因是,这是用于驱动报表布局的查询。 作为其中的一部分,我需要根据每个 WorksOrderNo 的总行数是否 >1 进行格式化。

例如,如果一个工作订单有三行,row_number 函数当前返回 1、2 和 3,其中每行的行数将返回 3。

【问题讨论】:

很确定 COUNT(*) 会这样做。 【参考方案1】:

函数就是COUNT()。在 SQL Server 中,所有聚合函数都可以作为窗口函数使用,只要不使用DISTINCT即可。

请注意,对于总计数,您不需要 ORDER BY

COUNT(*) Over (partition by Data.WorksOrderNo) as cnt

如果包含ORDER BY,则COUNT() 是累积的,而不是分区中所有行的常量。

【讨论】:

完美。我知道使用 count 会有一种简单的方法。非常感谢:)【参考方案2】:

看起来你只需要group bycount

select WorksOrderNo, count(*) as Row_Count
from Data 
group by WorksOrderNo

【讨论】:

由于选择包含其他唯一行,我无法分组。 @OWSam 好吧,从技术上讲,您可以将此查询放入 CTE 并返回...但 Gordon 建议的解决方案要优雅得多。

以上是关于带分区的 SQL Row_Count 函数的主要内容,如果未能解决你的问题,请参考以下文章

如何在sql中使用窗口函数来带来不同的值?

sql 分区函数中的非确定性函数

Apache Spark 使用 SQL 函数 nTile 对数据进行分区

从 SQL 窗口函数中排除分区?

SQL Server 数据分区管理

SQL Server 数据分区管理