递增列中的排名值

Incrementing Rank Value in Column

我有一个 table,其中包含客户、产品和排名。每个客户最多有 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)。

我如何查看 table 以及每个客户的排名中断(如缺失的 2 和 4)并重新排名(所以他们是 1、2、3而不是 1,3,5)

首先,您不必更改 table 中的数据。您可以在查询时使用 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
               );