我可以在 SQL 中的单个 SELECT 中使用 TOP 和 Count 吗?

Can I use TOP and Count in a single SELECT of SQL?

我正在使用 SQL Server2008R2。我有以下 SQL select 声明:

select column1, max(column2), min(column3)
from myTable
group by column1
order by column1

假设上面select语句returns 1001条记录。

让它return TOP 5不难:

select top 5 column1, max(column2), min(column3)
from myTable
group by column1
order by column1

如何修改上面的语句,使 1001 也将 return,因此我知道总共有多少条记录? 我想要这样的结果:

1001 column1 max(column2) min(column3) -- top#1 row data
1001 column2 max(column2) min(column3) -- top#2 row data
1001 column1 max(column2) min(column3) -- top#3 row data
1001 column2 max(column2) min(column3) -- top#4 row data
1001 column2 max(column2) min(column3) -- top#5 row data

1001 是可用记录的总数,我只 select 其中的前 5 个。我想知道前5名的总数和详情

一种方法是使用子查询:

select top 5 *
from (select count(*) over () as cnt, column1, max(column2), min(column3)
      from myTable
      group by column1
     ) t
order by column1;

虽然我更喜欢子查询来防止歧义,但它也可以在没有子查询的情况下工作:

      select top 5 count(*) over () as cnt, column1, max(column2), min(column3)
      from myTable
      group by column1
      order by column1;

您可以使用 count() over() window 函数..

select top 5 
    count(*) over (),
    column1, 
    max(column2), 
    min(column3)
from myTable
group by column1
order by column1