MySQL中實現rank排名查詢

2021-08-20 12:52:11 字數 1925 閱讀 6236

在mysql中,不存在類似於sql server或orcal等中的rank()函式來得到排名;所以我們需要手動地寫這個rank功能。

sql語句中,使用@來定義乙個變數。如:@abcsql語句中,使用:=來給變數賦值,:@abc:=123,則變數abc的值為123sql語句中,if(a,b,c)表示,如果a條件成立,那麼執行b,否則執行c,如:

@abc := if(2>1,100,200)的結果是,abc的值為100。

◎case...when...then語句

case...when...then語句有兩種情況:

case情況一(case 後面不帶表示式):

case when expression then 操作1

when expression then 操作2

else 操作n

end

注:自上而下,凡是走了其中乙個when或者是走了else了,其他的都不再走了。

case情況二(case 後面帶表示式,此時when 後面的則是該表示式可能的值):

case expression

when  expression的值1 then  操作1

when  expression的值2 then  操作2

else 操作n

end 

注:自上而下,凡是走了其中乙個when或者是走了else了,其他的都不再走了。

先建立乙個tablle,並放入一些資料,如:

age公升序排列(age相同時,排名繼續增加),示例:

注:這裡的(select @currank := 0)  q  的作用是:在同乙個select語句中給變數currank賦初始值。效果等

同於,兩個sql語句,第乙個先賦值,第二個再select:

age降序排列(age相同時,排名繼續增加),示例:

age公升序排列(age相同時,排名相同;但是到下乙個age不同時,排名不跳級,繼續+1),示例一(case...when...then):

age公升序排列(age相同時,排名相同;但是到下乙個age不同時,排名不跳級,繼續+1),示例二if(a,b,c):

age公升序排列(age相同時,排名相同;但是到下乙個age不同時,排名跳級+n),示例:

注:如果嫌查出來的列太多了,可以再對此結果進行select,如:

MySQL中實現Rank排名高階函式

先舉例乙個 select name,time,currank currank 1 as rank from 表名,select currank 0 qorder by time1.要在mysql中宣告乙個變數,你必須在變數名之前使用 符號。from子句中的 currank 0 部分允許我們進行變數初...

MySQL實現Rank高階排名函式

mysql中沒有rank排名函式,當我們需要查詢排名時,只能使用mysql資料庫中的基本查詢語句來查詢普通排名。儘管如此,可不要小瞧基礎而簡單的查詢語句,我們可以利用其來達到rank函式一樣的高階排名效果。在這裡我用乙個簡單例子來實現排名的查詢 首先我們先建立乙個我們需要進行高階排名查詢的playe...

在MySQL中實現Rank高階排名函式

mysql中沒有rank排名函式,當我們需要查詢排名時,只能使用mysql資料庫中的基本查詢語句來查詢普通排名。儘管如此,可不要小瞧基礎而簡單的查詢語句,我們可以利用其來達到rank函式一樣的高階排名效果。在這裡我用乙個簡單例子來實現排名的查詢 首先我們先建立乙個我們需要進行高階排名查詢的playe...