0

我的应用程序使用一般形式执行许多查询:

SELECT <aggregate-functions>
FROM <table-name>
WHERE <where-clause>
GROUP BY <group-by column list>

我想知道有多少记录对聚合结果集有贡献(换句话说,有多少记录与 WHERE 子句中的条件匹配),由于 SELECT 子句和 GROUP 中的聚合函数都隐藏了一些东西- BY 子句。我知道我可以使用相同的 WHERE 子句执行一个简单的 SELECT COUNT(*) 来获取该数字,但如果可能的话,我想避免第二次查询。是否有 SQL Server 特性/功能/等可以在没有其他查询的情况下产生该值?

4

2 回答 2

1

一个简单的解决方案是子选择:

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-26T18:50:35.647 回答
1

您可以添加一些涉及聚合的任意值的计数,甚至可以添加

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.name
于 2010-05-26T18:52:29.857 回答