С row_number()
оконной функцией:
select t.id, t.name, t.role
from (
select *, row_number() over (partition by role) rn
from employeeTable
) t
where t.rn <= 2
Вы также можете определить:
partition by role order by name
или:
partition by role order by id
вместо просто:
partition by role
для получения указанных c строк в результатах. Смотрите демо . Результаты:
| ID | Name | Role |
| --- | -------- | ------------- |
| 7 | Mia | Clerk |
| 8 | Amelia | Clerk |
| 1 | Emma | Manager |
| 2 | Olivia | Manager |
| 4 | Isabella | Sales Officer |
| 5 | Sophia | Sales Officer |