如何在SQL Server表中获取具有最大值的所有记录

RBT*_*RBT 2 sql t-sql sql-server having having-clause

MigratoryBirds在SQL Server表中的数据下面

birdType
1
4
4
4
5
5
5
3
Run Code Online (Sandbox Code Playgroud)

用于创建上表的SQL脚本:

/****** Object:  Table [dbo].[migratoryBirds]    Script Date: 20-Jul-17 8:01:02 AM ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[migratoryBirds](
    [birdType] [int] NULL
) ON [PRIMARY]

GO
Run Code Online (Sandbox Code Playgroud)

我的目标是获得表中频率最高的鸟类.如果我编写存储过程并可以自由编写多个SQL查询,那么这并不困难,但我正在尝试使用单个SQL查询来实现它.我试图看看HavingSQL服务器的子句是否对我有任何帮助.

所以我写的第一个查询是:

select birdType, count(1) AS [birdCount]
from migratorybirds
group by birdType
Run Code Online (Sandbox Code Playgroud)

它给出了以下输出

birdType birdCount
1        1
3        1
4        3
5        3
Run Code Online (Sandbox Code Playgroud)

由于这是一个聚合的情况,所以我认为Having条款可以帮助我在这里筛选出频率最高的记录3.birdType4和5具有最高频率3.

所以,我增强了我的查询,如下所示:

select birdType, count(1) AS [birdCount]
from migratorybirds
group by birdType
having count(1) > Max(count(1))
Run Code Online (Sandbox Code Playgroud)

给出以下错误:

消息130,级别15,状态1,行18无法对包含聚合或子查询的表达式执行聚合函数.

任何人都可以帮我实现同样的目标吗?

Gor*_*off 5

在SQL Server中,您可以使用top (1) with ties:

select top (1) with ties birdType, count(1) AS birdCount
from migratorybirds
group by birdType
order by count(1) desc;
Run Code Online (Sandbox Code Playgroud)