在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,如: