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

时间:2015-10-08 19:26:59

标签: sql sql-server sql-server-2008 select count

我正在使用SQL Server2008R2。我有以下SQL select语句:

TOP 5

让我们说上面的select语句返回1001条记录。

让它返回select top 5 column1, max(column2), min(column3) from myTable group by column1 order by column1 并不难:

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也会返回,因此我知道总共有多少条记录? 我想要一些像这样的结果:

{{1}}

1001是可用记录的总数,我只选择前5个。我想知道前5名的总数和细节。

2 个答案:

答案 0 :(得分:7)

一种方法是使用子查询:

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;

答案 1 :(得分:6)

您可以使用def number (): x = [1,2,3,4... 窗口功能..

count() over()