Home > Net >  increase rank based on particular value in column
increase rank based on particular value in column

Time:06-10

I would appreciate some help for below issue. I have below table

id items
1 Product
2 Tea
3 Coffee
4 Sugar
5 Product
6 Rice
7 Wheat
8 Product
9 Beans
10 Oil

I want output like below. Basically I want to increase the rank when item is 'Product'. May I know how can I do that? For data privacy and compliance purposes I have modified the data and column names

id items ranks
1 Product 1
2 Tea 1
3 Coffee 1
4 Sugar 1
5 Product 2
6 Rice 2
7 Wheat 2
8 Product 3
9 Beans 3
10 Oil 3

I have tried Lag and lead functions but unable to get expected output

CodePudding user response:

Here is solution using a derived value of 1 or 0 to denote data boundaries SUM'ed up with the ROWS UNBOUNDED PRECEDING option, which is key here.

SELECT 
    id,
    items,
    SUM(CASE WHEN items='Product' THEN 1 ELSE 0 END) OVER (ORDER BY id ROWS UNBOUNDED PRECEDING) as ranks
FROM 
  •  Tags:  
  • sql
  • Related