请问怎么在分页查询中返回分页前符合查询条件的记录数?

请问怎么查查询分页中返回符答查询条件的记录总数:

select top 10 * 
from (select row_number() 
over(order by id asc) as rownumber,* 
from com_system_menu) temp_row
where rownumber>((2-1)*10);

我要的记录数是上面Where rownumber>((2-1)*10)前的所有记录数?

阅读 3.7k
1 个回答

不知道你用的是什么数据库。

如果是MySQL的话有一个特性专门适用这种场景: FOUND_ROWS。比如按以下方式对某个表foobar执行查询

SELECT SQL_CALC_FOUND_ROWS * FROM foobar WHERE ...... LIMIT 10;           --- 执行分页查询并计算记录数
SELECT FOUND_ROWS();                                                      --- 获取计算后的记录数

注1,虽然上述是两条SELECT语句,但实际上查询只是执行一次。

如果使用的是PostgreSQL, 虽然没有完全对等的FOUND_ROWS实现,但是可以通过窗口函数变相地实现类似功能:

SELECT *, COUNT(*) OVER () AS total_rows FROM foobar WHERE ...... LIMIT 10;

注2,PG的上述查询会返回最多10行数据,其中列 total_rows 的值相同,它就是该查询不含LIMIT子句时的总行数。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题