在mysql8 之前的版本,因為沒有rank()方法的存在,所以在對欄位進行排名時,使用的是自定義自變數的方法,比如:
select id,name,@rank=@rank+1 as ranks from user u, (select @rank=0) ran order by u.age
自定義一個變數rank用來進行排名,求其中某一個值的排名只需要在外面加一層select就行:
select ranks from (select id,name,@rank=@rank+1 as ranks from user u, (select @rank=0) ran order by u.age) r where id=xxx
這樣在mysql8之前是能夠得到具體數值的,但是在mysql 8之後,ranks會被重置為1。即我們在最後使用where查詢後,ranks不再代表最後的排名。不過同時,mysql8也提供了新方法rank()。我們可以使用
select ranks from (select user_id, rank() over(order by price desc)
as ranks from bid ) res where user_id=xxx
這樣就可以得到最後對應欄位某條值的排名。