MySQL8 根據某屬性查詢欄位排名由自定義變數到rank()的變動

毅毅毅毅毅發表於2021-10-16

在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

這樣就可以得到最後對應欄位某條值的排名。

相關文章