Вы хотите использовать rank()
. Я думаю, что логика c выглядит примерно так:
select t.*,
rank() over (partition by email
order by (case when type = 'B' then 1 else 2 end),
salary desc
) as ranking
from t;
Совершенно неясно, что вы подразумеваете под lname
, будучи тем же самым. Так же как и что? Но я не думаю, что это необходимо для вашей логики c.