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名的总数和详细信息.
一种方法是使用子查询:
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)
你可以使用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)