mysql -n_mysql top n 问题

日常工作中,经常要查询分组的前几名或查询数据的前几条记录(第5条到第十条)等。

TOP-N分析法就是通过TOP-N算法从研究对象中得到所需的N个数据,并从排序列表中选取最大或最小的N个数据,这就是一个TOP-N算法。

mysql中用limit;oracle中用rownum。

mysql中没有top ,

你想查前几条数据 要用排序方试来查

order by id desc limit 0,10 按照id的倒序排序 取出前10条

order by id limit 5,10 按照id的正序排序 从第5条开始取10条

从mysql到oracle迁移一个程序,遇到了sql语句中的limit问题。

查遍网络,所提供的方法都极其麻烦,不利于通用。

以下是我的解决方案,可以与limit媲美。

比如从一个mobileuser 用户表中查询2到6条记录,按照第一次使用时间排序。

mysql语句为:

SELECT userid,password,firstusetime from mobileuser ORDER BY firstusetime DESC limit 2,6;

oracle语句为:

SELECT * FROM ( SELECT userid,password,firstusetime, RANK() OVER (ORDER BY firstusetime DESC ) RN   FROM mobileuser ) WHERE RN between 2 and 6;

rank() over 函数代表排行依据,整个sql语句就是从根据“ORDER BY firstusetime DESC”这个标准,找到排行2到6位的数据。

但是存在一个问题,根据排行依据,有些数据是并列的,这样返回的数据条数就会多于我们期望的。这时我们加一个rownum限制就行了。

SELECT * FROM ( SELECT userid,password,firstusetime, RANK() OVER (ORDER BY firstusetime DESC ) RN   FROM mobileuser ) WHERE RN between 2 and 6 and rownum<=5;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值