递增列中的排名值
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
);
我有一个 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
);