mysql 查询获取排名的方法
需求:获取分类平均值的名次? 比如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功能。
基本知识:
- sql语句中,使用@来定义一个变量。如:@abc
- sql语句中,使用:=来给变量赋值,:@abc:=123,则变量abc的值为123
- sql语句中,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了,其他的都不再走了。
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 查询获取排名的方法相关推荐
- mysql 查询获取排名的方法(绝对有效)
我去他大爷的,为了查询后搞个排名,在网上找了一下午的资料,对照着网上那些所谓的方法试了几十遍,每一个有效的! 没想到这快要下班的时候,居然找到了一种有效的方法,经本人测试,绝对没问题! ======= ...
- mysql 查询rowno_C# Mysql 查询 Rownum的解决方法
C# Mysql 查询 Rownum的解决方法,需要的朋友可以参考一下 Sql: 代码如下: SELECT @rownum:=@rownum+1 AS rownum, a.order_id , cas ...
- php mysql 获取排名,Mysql排序获取排名的实例代码
代码如下所示: SELECT @i:=@i+1 rowNum, if(@total=t.s_score,@rank,@rank:=@i) rank,@total:=t.s_score, t.* fro ...
- Mysql查询获取过去一年,最后一天,每月,每月的数据
Mysql查询获取过去一年,最后一天,每月,每月的数据 前言 今天博主将为大家分享Mysql查询获取过去一年,最后一天,每月,每月的数据,不喜勿喷,如有异议欢迎讨论! 锁的分类 在本MySQL教程中– ...
- mysql查询成绩排名
mysql查询成绩排名 表: create table study.sort_table (name varchar(20) null comment '姓名',score int null comm ...
- Java mysql获取行数_java – MySQL查询获取球体中的行(X,Y,Z坐标)?
我正在制作一个名为Minecraft with Bukkit API的游戏插件. 我有一个名为Reinforcements的数据库表,其中包含以下字段:x integer,y integer,z in ...
- mysql pt-kill_percona-toolkit之pt-kill 杀掉mysql查询或连接的方法
pt-kill 是一个非常简单的 杀mysql线程和查询的 工具. 主要是为了防止一些长的查询 长时间占用 系统资源,而对线上业务造成影响的情况. 主要作用: 从show processlist 中获 ...
- mysql 查询字段排名_mysql:查询排名
sql语句查询排名 思路:有点类似循环里面的自增一样,设置一个变量并赋予初始值,循环一次自增加1,从而实现排序: mysql里则是需要先将数据查询出来并先行按照需要排序的字段做好降序desc,或则升序 ...
- mysql 查询成绩排名_mysql 学生成绩查询排名
sql语句查询排名 思路:有点类似循环里面的自增一样,设置一个变量并赋予初始值,循环一次自增加1,从而实现排序: mysql里则是需要先将数据查询出来并先行按照需要排序的字段做好降序desc,或则升序 ...
最新文章
- pd.dataframe.append
- Firefox 44.0将在Linux上启用H.264支持:GTK3仍缺席
- java 字符串过长_idea java常量字符串过长解决办法
- JMeter入门教程(自己做测试了)
- Linux下安装ICE(自测)
- 改镜像_镜像制作大法
- Jetson TX2开发板的调试笔记
- cartographer的一些结果
- 罗胖又有“惊人之语”:内容收费的窗口期正来到
- GradientDrawable
- 上传图片至fastdfs显示连接超时
- Windows重装Ubuntu 20.04单系统
- ads1115应用电路及驱动程序
- 想要快速增肌?肌酸可以帮你高效获得肌肉和力量
- Java中的动态代理详解
- javascript_javascript吊装
- linux c语言编译成exe,C/C++程序从编译到最终生成可执行文件的过程分析
- 桥式整流电路原理;电感滤波原理;电容滤波原理
- python在线搭建_Jupyter在线python环境搭建
- 微信小程序前端拉取放激励广告全步骤教程