我有一张包含客户,产品和排名的表格。每位客户最多有5种产品:
Customer, Product, Rank
Cust A, Product 3, 1
Cust A, Product 7, 2
Cust A, Product 6, 3
Cust B, Product 4, 1
Cust B, Product 6, 3
Cust B, Product 3, 5
我删除了一些行(如Cust B Rank 2和4)。
我如何通过表格和每个客户的排名中断(如缺少的2和4)并重新排名(因此他们是1,2,3而不是1,3, 5)
答案 0 :(得分:1)
首先,您不必更改表格中的数据。您可以在查询时使用row_number()
函数:
select customer, product,
row_number() over (partition by customer order by rank) as rank
from t;
如果您使用这种方法,那么您不必担心将来的删除。
好的,如果您确实想要更改数据,则一种方法是相关子查询:
update t
set rank = (select count(*)
from t t2
where t2.customer = t.customer and t2.rank <= t.rank
);