【问题标题】:Can I use TOP and Count in a single SELECT of SQL?我可以在 SQL 的单个 SELECT 中使用 TOP 和 Count 吗?
【发布时间】:2016-01-06 13:57:39
【问题描述】:

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

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

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

让它返回TOP 5并不难:

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

如何修改上面的语句,这样 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

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

【问题讨论】:

  • 对第一列进行子选择。

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


【解决方案1】:

一种方法是使用子查询:

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;

【讨论】:

  • 这太棒了!谢谢!
【解决方案2】:

你可以使用count() over()窗口函数..

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-12
    • 1970-01-01
    • 2011-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多