SQL Server 中按类别选择前 N 条记录

在本文中,我们将向您展示如何在 SQL Server 中按类别或按组选择前 N 条记录,并附有示例。对于此选择前 3 名的演示,我们将使用下面显示的数据。

SQL 示例 1:按类别选择前 N 条记录

在此 SQL Server 示例中,我们将向您展示如何使用 子查询 选择每个 中的前 2 行。

-- Select First Row in each SQL Group By group

SELECT * FROM (
SELECT [FirstName]
      ,[LastName]
      ,[Education]
      ,[Occupation]
      ,[YearlyIncome]
      ,ROW_NUMBER() OVER (
                     PARTITION BY [Occupation] 
                     ORDER BY [YearlyIncome] DESC
         	   ) AS [ROW NUMBER]
  FROM [Customers]
  ) groups
WHERE groups.[ROW NUMBER] = 1
ORDER BY groups.YearlyIncome DESC
Select Top N Records for each Category in SQL Server 3

SQL Server 示例 2:按类别选择前 2 条记录

ROW_NUMBER 函数允许您为分区中的每条记录分配排名编号。您可以根据需要使用其余的 排名函数

  • CTE 中,首先按职业对数据进行分区,并使用年收入分配排名编号。
  • 接下来,它将从每个组中选择前 2 行。
WITH TopRows AS (
	SELECT [FirstName]
		  ,[LastName]
		  ,[Education]
		  ,[Occupation]
		  ,[YearlyIncome]
		  ,[Sales]
		  ,[HireDate]
		  ,ROW_NUMBER() OVER (
						 PARTITION BY [Occupation] 
						 ORDER BY [YearlyIncome] DESC
         		   ) AS [ROW NUMBER]
	  FROM [Employee]
)
SELECT * FROM TopRows
WHERE TopRows.[ROW NUMBER] <= 2
Select Top N Records for each Category 2