select *,if(@salary=salary,@rank:=@rank+1,@rank:=1),@salary:=salary from (select * from test order by salary) a,(select @salary:=0,@rank:=0) b;
SELECT salary , @r := IF(@p = salary, @r, @r + 1) AS rnk , @p := salary FROM test, ( SELECT @r := 0, @p := NULL ) init ORDER BY salary DESC;
select a.salary,(select count(distinct b.salary)+1 from test b where b.salary>a.salary) from test a order by a.salary desc;