zoukankan      html  css  js  c++  java
  • work_30_Mysql实现rank()排序功能

     1.MYSQL中如何实现rank排名查询

    实现效果,age相同rank增加和age相同rank相同。

    1.sql语句中,使用@来定义一个变量。如:@abc

    2.sql语句中,使用:=来给变量赋值,:@abc:=123,则变量abc的值为123

    3.sql语句中,if(A,B,C)表示,如果A条件成立,那么执行B,否则执行C,如:
      @abc := if(2>1,100,200)的结果是,abc的值为100。

    4.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了,其他的都不再走了。

    SELECT @curRank := 0:设置变量@curRank的默认值
    SELECT
        id,
        NAME,
        age ,@curRank :=@curRank + 1 AS rank
    FROM
        rank r,
        (SELECT @curRank := 0) c
    ORDER BY
        age DESC ,id 

    定位初始变量@curRank := 0, @prevRank := NULL

    判断排序后的买一条记录是否是@prevRank = age 如果是的话rang=@curRank

    SELECT
        id,
        NAME,
        age,
    
    CASE
    WHEN @prevRank = age THEN @curRank
    WHEN @prevRank := age THEN @curRank :=@curRank + 1
    
    END AS rank
    FROM
        rank r,
        (
            SELECT
                @curRank := 0,
                @prevRank := NULL
        ) c
    ORDER BY
        age DESC,
        id

     

     参考博客《《https://blog.csdn.net/justry_deng/article/details/80597916》》

  • 相关阅读:
    ubuntu开启SSH服务
    Ubuntu修改虚拟内存(即swap空间)
    【转】Ubuntu 13.10中MyEclipse 10.6+下载+安装+破解
    【转】 ubuntu下安装mysql
    【转】 Ubuntu 11.04 下安装配置 JDK 7
    Linux非root用户安装jdk和tomcat
    algorithm之改变序列算法--待解决
    时间日期设置--ctime头文件
    C中的一些函数
    algorithm之不变序列操作
  • 原文地址:https://www.cnblogs.com/asndxj/p/13920642.html
Copyright © 2011-2022 走看看