У меня есть таблица, в которой я хочу выбрать только топ-2 продаж в каждом классе, результат
Sophia A 40 Jennifer A 15 Greg B 50 Jeff B 20 Stella B 20
оконная функция density_rank также выполняет ожидаемое условие результата выборочных данных
select * from (select * , dense_rank() over(partition by class order by scores DESC ) as rn from tablea ) t where rn<=2
Вы можете использовать RANK:
RANK
SELECT * FROM (SELECT *, RANK() OVER(PARTITION BY class ORDER BY sales DESC) AS rnk FROM tab) sub WHERE rnk <=2;