增加列中的排名值

时间:2016-02-08 03:45:04

标签: sql netezza

我有一张包含客户,产品和排名的表格。每位客户最多有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)

1 个答案:

答案 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
               );