Предположим, у меня есть таблица покупок клиентов ("my_table"), подобная этой:
--------------------------------------
customerid | date_of_purchase | price
-----------|------------------|-------
1 | 2019-09-20 | 20.23
2 | 2019-09-21 | 1.99
1 | 2019-09-21 | 123.34
...
Я бы хотел найти n-го покупателя с самыми высокими расходами в этой таблице (скажем, n = 5).Итак, я попробовал это:
with cte as (
select customerid, sum(price) as total_pay,
row_number() over (partition by customerid order by total_pay desc) as rn
from my_table group by customerid order by total_pay desc)
select * from cte where rn = 5;
Но это дает мне бессмысленные результаты.По некоторым причинам rn не кажется уникальным (например, есть группа клиентов с rn = 1).Я не понимаю почему.Разве rn не должен быть просто номером строки?