mysql 获得类似排名的序号
2017-12-13 09:08
148 查看
最近做一个排名的查询,用的mysql数据库,一时不知道怎么弄了
如果是oracle数据库,里面有个
但是mysql可没这么多函数,度娘之后,发现还是要写函数到查询里
如果分数不等也要给个名次,那就是单纯的给记录加序号了,就更简单了,如下:
SELECT @rownum := 0
其中要明确
:= 表示赋值,右边的值给左边的
= 在这里表示的是判断,如果左右相等就返回1,不等就返回0
如:
给@num参数默认 0 ,然后判断是否等于1
这里就返回了0,
判断是否等于0 ,就返回了 1
如果是oracle数据库,里面有个
rownumer() (over partition by XXX order by XXXX)
但是mysql可没这么多函数,度娘之后,发现还是要写函数到查询里
SELECT obj.*, CASE WHEN @rowtotal = obj.grade THEN @rownum WHEN @rowtotal := obj.grade THEN @rownum := @rownum + 1 WHEN @rowtotal = 0 THEN @rownum := @rownum + 1 END AS rownum FROM ( select * from T_GRADE Order by grade+0 desc, CREATE_DATE asc ) obj, (SELECT @rownum := 0 ,@rowtotal := NULL) r以上查询就是在T_GRADE表里,将分数按高到低排序,并为其加上rownum,这个rownum就是名次,分数相等的就会同样的名次
如果分数不等也要给个名次,那就是单纯的给记录加序号了,就更简单了,如下:
SELECT @rownum := @rownum + 1 as rownum FROM ( select * from TJ_AP_GRADE Order by e_grade+0 desc, CREATE_DATE asc ) AS obj, (SELECT @rownum := 0 ) r特别注意:这里的@rownum是参数,如果不清零,每次查询都会持续累加,所以这里关联了一张参数赋值为0的表
SELECT @rownum := 0
其中要明确
:= 表示赋值,右边的值给左边的
= 在这里表示的是判断,如果左右相等就返回1,不等就返回0
如:
select @num = 1 from (select @num := 0 ) a
给@num参数默认 0 ,然后判断是否等于1
这里就返回了0,
select @num = 0 from (select @num := 0 ) a
判断是否等于0 ,就返回了 1
相关文章推荐
- mysql 使用rownum排序并获得排名
- mysql记录集中记录序号,MySQL中实现rownum功能类似的语句
- mysql上排名sql的写法,类似oracle的rank和dense
- mysql上排名sql的写法,类似oracle的rank和dense
- mysql获取成绩排名
- MySQL实现类似Oracle的序列
- 【mysql经典题目】科目成绩都大于80分\每个科目的第一名\总成绩排名
- MySQL 数据库生成自动增长序号
- 在MySQL中实现Rank高级排名函数
- mysql sqlserver 类似oracle rownum
- 安装mysql 获得 mysql.h 建立C接口
- mysql 排序 排名
- MySQL 获得当前日期时间 函数_冰山上的來音
- mysql 查找结果中自动加序号列
- oracle中与mysql中的命令 show databases, show tables, desc table类似的命令集
- MySQL用变量的方法添加伪序号列,MySql自增序列,序号列
- mysql查询中实现oracle中的rownum函数的效果,返回每行查询结果的行序号
- 【MySQL数据库开发之三】MySQL 获得数据库和表操作!
- 解决net start mysql 提示:服务名无效 请键入NET HELPING 2185以获得更多的帮助的问题