gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 09:17:53 26 4
gpt4 key购买 nike

我在 SQL Server 的 MigratoryBirds 表中有以下数据

birdType
1
4
4
4
5
5
5
3

创建上表的 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

我的目标是获取表中出现频率最高的鸟类类型。如果我编写一个存储过程并且可以自由地编写多个 SQL 查询,那么这并不困难,但我正在尝试使用单个 SQL 查询来实现它。我正在尝试查看 SQL Server 的 Having 子句是否对我有帮助。

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

select birdType, count(1) AS [birdCount]
from migratorybirds
group by birdType

给出以下输出

birdType birdCount
1 1
3 1
4 3
5 3

由于这是聚合的情况,所以我认为 Having 子句可以帮助我过滤出出现频率最高的记录 3birdType 4 和 5 的频率最高为 3。

因此,我像这样增强了查询:

select birdType, count(1) AS [birdCount]
from migratorybirds
group by birdType
having count(1) > Max(count(1))

给出以下错误:

Msg 130, Level 15, State 1, Line 18 Cannot perform an aggregate function on an expression containing an aggregate or a subquery.

有人可以帮助我实现同样的目标吗?

最佳答案

在 SQL Server 中,您可以将top (1) 与 ties 一起使用:

select top (1) with ties birdType, count(1) AS birdCount
from migratorybirds
group by birdType
order by count(1) desc;

关于sql - 如何获取SQL Server表中具有最大值的所有记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45204069/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com