Получить количество записей, отсканированных в совокупном запросе - PullRequest
0 голосов
/ 26 мая 2010

Мое приложение выполняет ряд запросов общей формы:

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

Я хотел бы знать, сколько записей внесено в совокупный результирующий набор (другими словами, сколько записей соответствует условиям в предложении WHERE), что скрыто из-за обеих агрегатных функций в предложении SELECT и предложение GROUP-BY. Я знаю, что мог бы сделать простой SELECT COUNT (*), используя то же предложение WHERE, чтобы получить это число, но я бы хотел избежать второго запроса, если это вообще возможно. Существует ли функция / функция / сервер SQL Server, которая будет генерировать это значение без другого запроса?

Ответы [ 2 ]

1 голос
/ 26 мая 2010

Вы можете добавить подсчет для некоторого произвольного значения, которое включает агрегацию, или даже сделать

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
1 голос
/ 26 мая 2010

Простым решением будет подвыбор:

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
...