sql语句查询加分页

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql语句查询加分页相关的知识,希望对你有一定的参考价值。

有一张表Table1,字段(主键id,阅读次数readcount[int]和权重weight[int])我想查询每页15行,前五行是readcount>10的降序排序(规定好的),后十行是根据weight降序排序,进行分页。
我已经搞了三天多了,实在是没办法。请大神帮帮我吧。在线等, 很急

你的意思是前五行是固定的,后十行进行分页是么,前五行固定写死,后十行用参数或动态sql来进行分页。例如第一页:

select top 5 id,readcount,weight from table1 order by readcount desc
union all
select top 10,id,readcount,weight from table1 order by weight desc  --这句进行动态sql或传参数进行分页,网上分页的sql很多。

有问题再追问。

追问

不是的,都是动态的,都需要分页

追答

也没问题的,还是上面的格式,只是在top 5这句也加上动态sql

参考技术A with t as (select * from Table1 a order by weight)
select * from (
select top 5 t.*,'1' as num from t where readcount>10
union
(select top 10 t.*,'2' as num from t minus select top 5 t.*,'2' as num from t where readcount>10)
) order by num,weight

把前5个加上标签1,后10个加上标签2,最后按照标签排序就ok了

追问

看不太懂。在能具体些吗?

追答

你要问的是不是怎么让它按照你的意图排序?
那就union之后把前五个化作一组,后十个看作一组,按照组号排序,组内按照weight排序,那就和你的要求一样了

参考技术B select top 10 * from table

Oracle, SQL Server, My SQL如何实现数据分页查询语句

参考技术A Oracle, SQL Server 和MySQL的分页SQL语句如下:Oracle:方法一:SELECT * FROM(SELECT A.*, ROWNUM RNFROM (SELECT * FROM TABLE_NAME) AWHERE ROWNUM <= 40)WHERE RN = 21;方法二:SELECT * FROM(SELECT A.*, ROWNUM RNFROM (SELECT * FROM TABLE_NAME) A)WHERE RN between 21 and 40公认第二种方法效率没有第一种高。原因是第二种要把子查询执行完,而第一种方法子查询执行到Rownum=40后就结束了。MySQL:SELECT * FROM TABLE_NAME LIMIT 10, 20表示从第11条数据开始取20条数据返回,limit后的2个参数含义为:起点和步长,即从那条数据开始,取多少条数据,再如取前20条数据:SELECT * FROM TABLE_NAME LIMIT 0, 20SQL Server2000:SELECT TOP @pagesize * FROM TABLE_NAME WHERE id not in (SELECT TOP @pagesize*(@page-1) id FROM TABLE_NAME ORDER BY id) ORDER BY id本回答被提问者采纳

以上是关于sql语句查询加分页的主要内容,如果未能解决你的问题,请参考以下文章

使用sql语句实现分页查询

ORACLE分页查询SQL语句

分页查询的sql 语句(参数1,参数2)?怎么写?

一条sql语句实现分页查询,且能返回记录总数

如何用sql语句 实现分页查询

sqlserver多表查询分页语句