在MySQL中,不存在相似於SQL Server或Orcal等中的rank()函數來獲得排名;因此咱們須要手動地寫這個rank功能。html
CASE WHEN expression THEN 操做1程序員
WHEN expression THEN 操做2sql
.......express
ELSE 操做n函數
ENDspa
注:自上而下,凡是走了其中一個when或者是走了else了,其餘的都再也不走了。.net
case狀況二(CASE 後面帶表達式,此時WHEN 後面的則是該表達式可能的值):htm
CASE expressionblog
WHEN expression的值1 THEN 操做1get
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,如: