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

sps*_*pli 1 sql sql-server select count sql-server-2008

我使用的是SQL Server2008R2.我有以下SQL select语句:

select column1, max(column2), min(column3)
from myTable
group by column1
order by column1
Run Code Online (Sandbox Code Playgroud)

假设上面的select语句返回1001条记录.

让它回归TOP 5并不难:

select top 5 column1, max(column2), min(column3)
from myTable
group by column1
order by column1
Run Code Online (Sandbox Code Playgroud)

如何修改上述语句,以便1001也会返回,因此我知道总共有多少条记录?我想要一些像这样的结果:

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
Run Code Online (Sandbox Code Playgroud)

1001是可用记录的总数,我只选择前5个.我想知道前5名的总数和详细信息.

Gor*_*off 7

一种方法是使用子查询:

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

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

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


Jam*_*D77 6

你可以使用count() over()窗口功能..

select top 5 
    count(*) over (),
    column1, 
    max(column2), 
    min(column3)
from myTable
group by column1
order by column1
Run Code Online (Sandbox Code Playgroud)