我的应用程序使用一般形式执行许多查询:
SELECT <aggregate-functions>
FROM <table-name>
WHERE <where-clause>
GROUP BY <group-by column list>我想知道有多少记录参与了聚合结果集(换句话说,有多少记录与WHERE子句中的条件匹配),因为SELECT子句和GROUP-BY子句中的聚合函数都是隐藏的。我知道我可以使用相同的WHERE子句执行一个简单的SELECT COUNT(*)来获得这个数字,但是如果可能的话,我希望避免第二次查询。是否有SQL Server特性/函数/等可以在不进行其他查询的情况下生成该值?
发布于 2010-05-27 02:50:36
一个简单的解决方案是一个子选择:
Select ...
, ( Select Count(*)
From Table
Where ...) As TotalCount
From Table
Where ...
Group By ...如果您使用的是SQL Server 2005或更高版本,则可以执行以下操作:
With RankedItems As
(
Select Col1
, Row_Number() Over ( Order By Col1 Asc, Col2 Asc... ) As Num
, Row_Number() Over ( Order By Col1 Desc, Col2 Desc ) As RevNum
From Table
Where ...
)
Select Col1, Min(Num + RevNum - 1) As TotalCount
From RankedItems
Group By Col1发布于 2010-05-27 02:52:30
您可以添加一些涉及聚合的任意值的计数,甚至可以这样做
SELECT x.name,
y.name,
z.name,
AVG(x.tacos) AS average_tacos,
SUM(1) AS aggregated_row_count
FROM ....
WHERE ...
GROUP BY x.name, y.name, z.namehttps://stackoverflow.com/questions/2915726
复制相似问题