In this article, we will show you how to Select Top N Records for each Category or in each group in SQL Server with example. For this select Top 3 demo, We are going to use the below-shown data

Select Top N Records for each Category in SQL Example 1
In this SQL Server example, we show you how to Select Top 2 rows in each Group using a subquery.
-- 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 2 Records for each Category in SQL Server Example 2
The ROW_NUMBER Function allows you to assign the rank number to each record present in a partition. You can also use remaining Ranking functions, as per your requirements.
- Within the CTE, First, partition the data by Occupation and assign the rank number using the yearly income.
- Next, it is going to select the top 2 rows from each group.
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
