mysql rank 排行

MySQL中rank函数如何实现

MySQL中不存在类似于SQL Server或Orcal中的rank()函数来得到排名。而在实际的工作中,常常需要将查询后排序得到的排名给记录下来。由于项目需要,不仅要对成绩进行排名,而且需要相同成绩的具有相同的排名。根据网上的提供的排名方法,进一步进行扩充,得到了下面的实现方式。

表:score,有三个字段,id,name,score

表中原始数据:

 

SQL代码:

select
tmp.id,tmp.name,tmp.score,
-- 顺序一直在变大
@j:=@j+1 as j,
-- 只有在前后二次排序值不同时才会使用顺序号
@k:=(case when @pre_score=tmp.score then @k else @j end) as rank,
@pre_score:=tmp.score as pre_score
from
(
-- 成绩排序
select * from score order by score desc
) tmp,
-- @k 表示最终的排名(相同值时序号相同)
-- @j 表示顺序排名
-- @pre_score上一次排序值
(select @k :=0,@j:=0, @pre_score:=0) sdcore

排序后的结果:

时间: 2024-11-05 19:03:06

mysql rank 排行的相关文章

html5手机Web单页应用实践--起点移动阅读

一开始以hybrid形式做了一个android的小说阅读客户端,叫4G阅读.而后由于业务需求,要迅速实现纯手机html5 版的,所以就直接在原先客户端内内嵌的网页进行改版,快速实现以后在优化的过程中发现越改越多越改越多- 注意此web应用只支持android及iphone内的浏览器,及PC或mac上的chrome,safari,firefox等支持html5的浏览器.IE10以上浏览器 这算是试验版了吧,以前没这么弄过.. 手机访问http://crapi.4gshu.com:8096/4g-r

MySQL使用SQL实现Oracle Rank函数功能

需求:按照用户的积分对用户进行排名. 事例表结构 CREATE TABLE `users_points` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `user_id` bigint(20) NOT NULL COMMENT '用户ID', `score` int(11) NOT NULL COMMENT '分数', `score_rank` int(11) NOT NULL COMMENT '分数排名', `created_at` date

php+mysql查询指定日期记录 本月数据点击排行

$time = time(); $days = 86400*30; $sql = "select * from test where  $time-updated<$days  order by click_num desc limit 10 "; $db ='daydb'; $query = mysql_db_query($db,$sql,mysql_connect('localhost','root','root')); if( $query ) {  while( $rs

最新数据库排行:MySQL第二 Oracle面临危机

9月份TOPDB Top Database Index排行榜出炉,TOPDB Top Database Index是根据数据库在谷歌上的搜索频率分析得出的,数据库被搜索的频率越大,表示数据库越受欢迎. 9月份的TOPDB Top 数据库索引与去年同期相比,Oracle下滑了2.9%,MySQL处于排行榜第二名位置,而谷歌的Firebase同比增长了1.4%,成为增长最快的数据库. Firebase 2014年被谷歌收购,实时数据库是为后台开发提供主要功能.Firebase数据库实时数据库通过为A

MYSQL 排行类的相关SQL写法,仅供参考

SELECT * FROM (SELECT pid, (@rowno:=@rowno+1) as rowno FROM user, (select (@rowno:=0)) b WHERE cid = 1 order by total_score DESC) as c WHERE pid = 1

周排行、月排行榜开发总结

预备知识:group by,MySQL函数week().month() 在设计数据库时一般都有一个字段来记录文章的点击率,如果我们要统计一周或一个月点击率排行光靠这一个字段是肯定是无法实现的.这时就要新建一个表,用来记录每篇文章每天的点击率. 假设这个表名为ranking,定义四个字段:rid(表ID),contentid(与文章ID关联),hits(记录每天点击率),date(时间,重要,查询时作比较) ranking大致结构 id      contentid      hits      

Oracle 10g vs PostgreSQL 8 vs MySQL 5(外围特性评比)

mysql|oracle This is my comparison of installing and getting started with Oracle 10g, PostgreSQL 8 and MySQL 5. This is what I consider the comparison of state of the art for three categories of DB: Commercial vs. Academe vs. Internet Model. This is

MySQL的日志分析工具

MySQL的性能从查看日志开始.硬件配置低常常导致这样的问题,但事实上大多数情况并不在这里.某些"慢"SQL阻塞了其他语句的执行,优化查询是第一步需要做的. "工欲善其事必先利其器",MySQL自身的一款mysqldumpslow 查询日志分析器,该工具不但陈旧,验证规范不准确.今天要说的是Percona 的工具pt-query-digest,它能够分析慢查询日志内容,生成查询报告,过滤,重放或传送一些查询语句至MySQL,PostgreSQL,memcached或

MySQL中在查询结果集中得到记录行号的方法

 如果需要在查询语句返回的列中包含一列表示该条记录在整个结果集中的行号, ISO SQL:2003 标准提出的方法是提供 ROW_NUMBER() / RANK() 函数. Oracle 中可以使用标准方法(8i版本以上),也可以使用非标准的 ROWNUM : MS SQL Server 则在 2005 版本中提供了 ROW_NUMBER() 函数:但在MySQL 中似乎还没有这样的系统自带功能.虽然 LIMIT 可以很方便的对返回的结果集数量和位置进行过滤,但过滤出来的记录的行号却没办法被 S