дополнительно сортировку?
with t as(
select name, salary,
row_number() over(partition by (name) order by salary) rn
from users
)
select name, salary from t where rn <= 3;
Вот explain:
-> Filter: (t.rn <= 3) (cost=0.338..112256 rows=332569)
-> Table scan on t (cost=2.5..2.5 rows=0)
-> Materialize CTE t (cost=0..0 rows=0)
-> Window aggregate: row_number() OVER (PARTITION BY users.`name` ORDER BY users.salary )
-> Sort: users.`name`, users.salary (cost=100414 rows=997807)
-> Index scan on users using name_salary (cost=100414 rows=997807)
Ведь index scan по name_salary и так отсортированное все выдает, зачем Sort?
Учитывая, что кост у этого сорта 0 — просто такое дерево исполнения, что в нём есть узел, называющийся sort.
Обсуждают сегодня