mysql top n 問題

平常工做中,常常要查詢分組的前幾名或查詢數據的前幾條記錄(第5條到第十條)等。mysql

  TOP-N分析法就是經過TOP-N算法從研究對象中獲得所需的N個數據,並從排序列表中選取最大或最小的N個數據,這就是一個TOP-N算法。算法

mysql中用limit;oracle中用rownum。sql

mysql中沒有top ,
你想查前幾條數據 要用排序方試來查 
order by id desc limit 0,10 按照id的倒序排序 取出前10條
order by id limit 5,10 按照id的正序排序 從第5條開始取10條
網絡

從mysql到oracle遷移一個程序,遇到了sql語句中的limit問題。oracle

查遍網絡,所提供的方法都極其麻煩,不利於通用。函數

如下是個人解決方案,能夠與limit媲美。spa

好比從一個mobileuser 用戶表中查詢2到6條記錄,按照第一次使用時間排序。對象

mysql語句爲:排序

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

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;

相關文章
相關標籤/搜索