需求:获取分类平均值的名次? 比如10个班级的平均分,按照班级名称排序,后面跟着名次。记录表:student ;字段:banji 班级;AvgS 平均分;pm 排名;解决方法:
SELECT class, AVG(score) AS avgs FROM student GROUP BY class ORDER BY avgs DESC;SELECT A.*, @rank:=@rank+1 AS pm FROM (SELECT class, AVG(score) AS avgs FROM student GROUP BY class ORDER BY avgs DESC) A, (SELECT @rank:=0) B;

2、MySQL中实现rank排名查询

在MySQL中,不存在类似于SQL Server或Orcal等中的rank()函数来得到排名;所以我们需要手动地写这个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了,其他的都不再走了。

MySQL中,手写rank示例:

先创建一个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 查询获取排名的方法相关推荐

  1. mysql 查询获取排名的方法(绝对有效)

    我去他大爷的,为了查询后搞个排名,在网上找了一下午的资料,对照着网上那些所谓的方法试了几十遍,每一个有效的! 没想到这快要下班的时候,居然找到了一种有效的方法,经本人测试,绝对没问题! ======= ...

  2. mysql 查询rowno_C# Mysql 查询 Rownum的解决方法

    C# Mysql 查询 Rownum的解决方法,需要的朋友可以参考一下 Sql: 代码如下: SELECT @rownum:=@rownum+1 AS rownum, a.order_id , cas ...

  3. php mysql 获取排名,Mysql排序获取排名的实例代码

    代码如下所示: SELECT @i:=@i+1 rowNum, if(@total=t.s_score,@rank,@rank:=@i) rank,@total:=t.s_score, t.* fro ...

  4. Mysql查询获取过去一年,最后一天,每月,每月的数据

    Mysql查询获取过去一年,最后一天,每月,每月的数据 前言 今天博主将为大家分享Mysql查询获取过去一年,最后一天,每月,每月的数据,不喜勿喷,如有异议欢迎讨论! 锁的分类 在本MySQL教程中– ...

  5. mysql查询成绩排名

    mysql查询成绩排名 表: create table study.sort_table (name varchar(20) null comment '姓名',score int null comm ...

  6. Java mysql获取行数_java – MySQL查询获取球体中的行(X,Y,Z坐标)?

    我正在制作一个名为Minecraft with Bukkit API的游戏插件. 我有一个名为Reinforcements的数据库表,其中包含以下字段:x integer,y integer,z in ...

  7. mysql pt-kill_percona-toolkit之pt-kill 杀掉mysql查询或连接的方法

    pt-kill 是一个非常简单的 杀mysql线程和查询的 工具. 主要是为了防止一些长的查询 长时间占用 系统资源,而对线上业务造成影响的情况. 主要作用: 从show processlist 中获 ...

  8. mysql 查询字段排名_mysql:查询排名

    sql语句查询排名 思路:有点类似循环里面的自增一样,设置一个变量并赋予初始值,循环一次自增加1,从而实现排序: mysql里则是需要先将数据查询出来并先行按照需要排序的字段做好降序desc,或则升序 ...

  9. mysql 查询成绩排名_mysql 学生成绩查询排名

    sql语句查询排名 思路:有点类似循环里面的自增一样,设置一个变量并赋予初始值,循环一次自增加1,从而实现排序: mysql里则是需要先将数据查询出来并先行按照需要排序的字段做好降序desc,或则升序 ...

最新文章

  1. pd.dataframe.append
  2. Firefox 44.0将在Linux上启用H.264支持:GTK3仍缺席
  3. java 字符串过长_idea java常量字符串过长解决办法
  4. JMeter入门教程(自己做测试了)
  5. Linux下安装ICE(自测)
  6. 改镜像_镜像制作大法
  7. Jetson TX2开发板的调试笔记
  8. cartographer的一些结果
  9. 罗胖又有“惊人之语”:内容收费的窗口期正来到
  10. GradientDrawable
  11. 上传图片至fastdfs显示连接超时
  12. Windows重装Ubuntu 20.04单系统
  13. ads1115应用电路及驱动程序
  14. 想要快速增肌?肌酸可以帮你高效获得肌肉和力量
  15. Java中的动态代理详解
  16. javascript_javascript吊装
  17. linux c语言编译成exe,C/C++程序从编译到最终生成可执行文件的过程分析
  18. 桥式整流电路原理;电感滤波原理;电容滤波原理
  19. python在线搭建_Jupyter在线python环境搭建
  20. 微信小程序前端拉取放激励广告全步骤教程

热门文章

  1. Android Studio实现简单的购物商城界面
  2. ThinkPad T460S 拆解图 拆解图
  3. 勇斗勒索软件的英雄疑因旧罪被捕;华为、腾讯为用户数据起冲突
  4. bit.ly短网址API
  5. 最强中国北斗芯每三百万年差一秒 铷钟授时应用在哪?
  6. Mr.Xiong使用jQuery从控制器获取数据
  7. sql存储过程及应用
  8. miniui页面移动的时候透明_PPT中「透明度」功能,根本想不到还能这样用
  9. 华为nqa和bfd实际应用配置案例
  10. 图书馆管理系统中遇见的问题与问题的解决方法思路