Вы можете использовать оконные функции для решения этой задачи с наибольшим числом групп:
select t.*
from (
select
t.*,
row_number() over(partition by name order by phone_number) rn
from mytable t
) t
where rn <= 10
Обратите внимание, что вам нужен столбец порядка, чтобы определить, что на самом деле означает «10 лучших». Я предположил phone_number
, но вы можете изменить его на тот, который лучше всего подходит для вашего варианта использования.
Еще лучше: как прокомментировал waldente, снежинка имеет синтаксис qualify
, что устраняет необходимость в подзапросе:
select t.*
from mytable t
qualify row_number() over(partition by name order by phone_number) <= 10