在本文中,我们将向您展示如何在 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

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
