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

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

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.8k
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子句时的总行数。

推荐问题