我有以下數據MigratoryBirds
表中的SQL Server如何獲得SQL Server表
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
子句可以幫助我在這裏過濾掉具有最高頻率3
的記錄。 birdType
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.
誰能幫助我實現相同?